Python (точно CPython) использует общие маленькие целые числа для быстрого доступа.Целые числа в диапазоне [-5, 256] уже существуют в памяти, поэтому, если вы проверите адрес, они совпадают.Однако для больших целых чисел это не так.
a = 100000
b = 100000
a is b # False
Подождите, что?Если вы проверите адрес чисел, вы найдете что-то интересное:
a = 1
b = 1
id(a) # 4463034512
id(b) # 4463034512
a = 257
b = 257
id(a) # 4642585200
id(b) # 4642585712
Это называется целочисленный кеш.Вы можете прочитать больше о целочисленном кеше здесь .
Благодаря комментариям @KlausD и @ user2357112, в которых упоминается, прямой доступ к маленьким целым числам будет использовать целочисленный кеш, а если вы выполняете вычисления, хотя они могут равняться числу в диапазоне [-5, 256], этоне кэшированное целое число.например,
pow(3, 47159012670, 47159012671) is 1 # False
pow(3, 47159012670, 47159012671) == 1 # True
«Текущая реализация хранит массив целочисленных объектов для всех целых чисел от -5 до 256, когда вы создаете int в этом диапазоне, вы фактически просто получаете ссылку на существующуюобъект. ”
Почему?Потому что маленькие целые числа чаще используются в циклах.Использование ссылки на существующие объекты вместо создания нового объекта экономит накладные расходы.