Назад к задачам
Junior — Senior
4

Разбор поведения оператора is при сравнении целых в Python

Получайте помощь с лайвкодингом в реальном времени с Sobes Copilot
Условие задачи

Объясните, почему при выполнении следующего кода в интерактивной оболочке Python получаются такие результаты. Обратите внимание на то, как Python кэширует небольшие целые числа и как это влияет на проверку идентичности объектов с помощью оператора is.

>>> x = 256
>>> y = 256
>>> x is y
True

>>> x = 257
>>> y = 257
>>> x is y
False
  • При значениях от -5 до 256 Python использует внутренний кэш небольших целых чисел, поэтому переменные, получившие одинаковое значение из этого диапазона, указывают на один и тот же объект в памяти – проверка is возвращает True.
  • Для чисел, выходящих за пределы кэшируемого диапазона (например, 257), каждый оператор присваивания создаёт новый объект. Поэтому две переменные с одинаковым значением, но за пределами кэша, ссылаются на разные объекты, и is возвращает False.
  • Оператор is проверяет идентичность объектов, а не их равенство. Для сравнения значений следует использовать ==.
  • Практический вывод: не полагайтесь на is для сравнения чисел; используйте ==, если важна только эквивалентность значений, а is оставляйте для проверок на None или сравнения с единственными объектами.