Назад к задачамПолучайте помощь с лайвкодингом в реальном времени с Sobes Copilot
Junior — Senior
4
Разбор поведения оператора is при сравнении целых в Python
Условие задачи
Объясните, почему при выполнении следующего кода в интерактивной оболочке 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или сравнения с единственными объектами.