El operador 'is' se comporta inesperadamente con enteros no almacenados en caché
Al jugar con el intérprete de Python, me topé con este caso conflictivo con respecto alis
operador:
Si la evaluación tiene lugar en la función, devuelveTrue
, si se hace fuera, vuelveFalse
.
>>> def func():
... a = 1000
... b = 1000
... return a is b
...
>>> a = 1000
>>> b = 1000
>>> a is b, func()
(False, True)
Desde elis
el operador evalúa elid()
's para los objetos involucrados, esto significa quea
yb
señalar lo mismoint
instancia cuando se declara dentro de la funciónfunc
pero, por el contrario, apuntan a un objeto diferente cuando están fuera de él.
¿Por qué esto es tan?
Nota: Soy consciente de la diferencia entre identidad (is
) e igualdad (==
) operaciones como se describe enComprender el operador "es" de Python. Además, también soy consciente del almacenamiento en caché que Python está realizando para los enteros en el rango[-5, 256]
como se describe enEl operador "es" se comporta inesperadamente con enteros.
Estano es el caso aquí ya que los números están fuera de ese rango yhago querer evaluar la identidad yno igualdad.