Я читал Python Модель данных. Следующий текст взят из здесь :
Типы влияют практически на все аспекты поведения объекта. Даже важность идентичности объекта зависит в некотором смысле: для неизменяемых типов операции, которые вычисляют новые значения, могут фактически возвращать ссылку на любой существующий объект с тем же типом и значением, в то время как для изменяемых объектов это недопустимо. Например, после a = 1; b = 1
, a
и b
могут или не могут ссылаться на один и тот же объект со значением один, в зависимости от реализации, но после c = []; d = []
, c
и d
гарантированно ссылаются до двух разных, уникальных, недавно созданных пустых списков. (Обратите внимание, что c = d = []
назначает один и тот же объект обоим c
и d
.)
Таким образом, упоминается, что для неизменяемых типов операции, которые вычисляют новые значения, могут фактически возвращать ссылку к существующему объекту с тем же типом и значением. Итак, я хотел проверить это. Ниже приведен мой код:
a = (1,2,3)
b = (1,2)
c = (3,)
k = b + c
print(id(a))
>>> 2169349869720
print(id(k))
>>> 2169342802424
Здесь я выполнил операцию для вычисления нового кортежа, который имеет то же значение и тип, что и a
. Но я получил объект, ссылающийся на другой идентификатор. Это означает, что я получил объект, который ссылается на другую память, чем a. Почему это?