При игре с интерпретатором 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" оператор ведет себя неожиданно с целыми числами.
Этот здесь не относится, так как числа находятся за пределами этого диапазона, а Я хочу оценить идентичность и не.