Посмотрите на приведенный ниже пример:
>>> a=256
>>> b=256
>>> print(id(a),id(b))
(31765012, 31765012)
>>>
>>> c=257
>>> d=257
>>> print(id(c),id(d))
(44492764, 44471284)
>>>
Это поможет вам понять неожиданное поведение целых чисел. Всякий раз, когда вы создаете Int в диапазоне от -5
до 256
, вы на самом деле просто получаете ссылку на существующий объект. Это называется Integer Caching в Python.
В CPython функцией C-API, которая обрабатывает создание нового объекта int, является PyLong_FromLong(long v)
. см. документацию по этой ссылке
РЕДАКТИРОВАТЬ: Теперь перейдем к списку. Для одинаковых элементов списка (большие целые числа) вы получаете одинаковые идентификаторы, поскольку список создается сразу или вы можете сказать это за один раз.
Вы также можете добиться аналогичного поведения с целыми числами, см. Пример ниже с параллельным присваиванием.
>>>
>>> a,b = 300,300
>>>
>>> print(id(a),id(b))
(36132288, 36132288)
>>>
Надеюсь, это рассеет ваши сомнения.