Кажется, что 2 is 2
и 3 is 3
всегда будут истинными в python, и вообще любая ссылка на целое будет такой же, как любая другая ссылка на одно и то же целое число. То же самое происходит с None
(т.е. None is None
). Я знаю, что это не происходит с пользовательскими типами или изменяемыми типами. Но иногда он терпит неудачу и на неизменяемых типах:
>>> () is ()
True
>>> (2,) is (2,)
False
То есть: две независимые конструкции пустого кортежа дают ссылки на один и тот же объект в памяти, но две независимые конструкции одинаковых одномерных (неизменяемых) кортежей элементов создают два одинаковых объекта. Я тестировал, а frozenset
работал так же, как и кортежи.
Что определяет, будет ли объект дублироваться в памяти или будет иметь один экземпляр с большим количеством ссылок? Это зависит от того, является ли объект "атомарным" в некотором смысле? Различается ли она в соответствии с реализацией?