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.

Respuestas a la pregunta(2)

Su respuesta a la pregunta