Оператор 'is' ведет себя неожиданно с не кэшированными целыми числами
Играя с интерпретатором Python, я наткнулся на этот противоречивый случай, касающийсяis
оператор:
Если оценка происходит в функции, она возвращаетTrue
, если это сделано вне, это возвращаетFalse
.
>>> def func():
... a = 1000
... b = 1000
... return a is b
...
>>> a = 1000
>>> b = 1000
>>> a is b, func()
(False, True)
Посколькуis
Оператор оцениваетid()
для участвующих объектов, это означает, чтоa
а такжеb
указывают на то же самоеint
экземпляр, когда объявлено внутри функцииfunc
но, напротив, они указывают на другой объект, находясь вне его.
Почему это так?
Заметка: Я знаю о разнице между идентичностью (is
) и равенство (==
) операции, как описано вПонимание оператора Python "is", Кроме того, я также знаю о кешировании, которое выполняется python для целых чисел в диапазоне[-5, 256]
как описано вОператор "is" ведет себя неожиданно с целыми числами.
этоздесь не тот случай так как числа находятся вне этого диапазона ия делаю хочу оценить личность ине равенство.