Неизменяемые объекты с одинаковым значением и типом, не ссылающиеся на один и тот же объект - PullRequest
0 голосов
/ 23 марта 2020

Я читал 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. Почему это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...