Я думаю, что главная путаница здесь заключается в следующем: в Java такая строка, как
int i = 5;
выделяет память для целого числа и связывает имя i
с этой ячейкой памяти. Вы можете как-то отождествить имя i
с этим местом в памяти и его типом и назвать все это целой переменной i
.
В Python строка
i = 5
вычисляет выражение с правой стороны, что приведет к объекту Python (в этом случае выражение действительно простое и даст целочисленный объект 5
). Оператор присваивания заставляет имя i
указывать на этот объект, но отношение между именем и объектом совершенно иное, чем в Java. Имена всегда являются просто ссылками на объекты, и может быть много имен, ссылающихся на один и тот же объект, или вообще без имен.