Вопрос в следующем. Команды y = y * 2 и y *= 2 отличаются тем, что при исполнении первой команды у нас создается новый объект, а при исполнении второй изменяется тот, на который мы ссылаемся.
y = 2 print(id(y)) # 8790392243920 y *= 2 print(id(y)) 8790392243984 # Почему здесь создается новый объект? y = y * 2 print(id(y)) 8790392244112
Возможно ответ состоит в том, что числа неизменяемые объекты?