С какого целого числа перестают кэшироваться и повторно использоваться в Python?

В Python 3:

>> X = 42
>> Y = 42
>> X is Y
True

>> X = 2 ** 20
>> Y = 2 ** 20
>> X is Y
False

>> X = 2 ** 2
>> Y = 2 ** 2
>> X is Y
True

Каково точное значение для целых чисел, с которого я начинаю получать False вместо True, когда я заявляю "X - Y"? (Предполагая, что я использую стандартный Python 3).

1 ответ

Решение

Это зависит от интерпретатора (т. Е. Нет спецификаций, требующих такого кеширования). Но насколько я знаю python Интерпретатор имеет кеш для целых чисел до 256 включительно. Кроме того, значения до -5 включительно также кэшируются. Таким образом, диапазон составляет от -5 до 256 (оба включены), как написано в документации:

Текущая реализация хранит массив целочисленных объектов для всех целых чисел от -5 до 256 (..)

Поэтому лучше никогда не использовать равенство ссылок, чтобы проверить, равны ли два целых числа, всегда используйте==, Это также полезно, если вы, например, сравните int против NumPy int16, Если вы используете проверку ссылок, произойдет следующее:

>>> np.int16(12) is 12
False
>>> np.int16(12) == 12
True
Другие вопросы по тегам