O operador 'is' se comporta inesperadamente com números inteiros não armazenados em cache

Ao brincar com o intérprete Python, deparei-me com este caso conflitante sobre ois operador:

Se a avaliação ocorrer na função, ela retornaráTrue, se for feito fora, ele retornaFalse.

>>> def func():
...     a = 1000
...     b = 1000
...     return a is b
...
>>> a = 1000
>>> b = 1000
>>> a is b, func()
(False, True)

Desde ois O operador avalia oid()para os objetos envolvidos, isso significa quea eb aponte para o mesmoint instância quando declarado dentro da funçãofunc mas, pelo contrário, apontam para um objeto diferente quando estão fora dele.

Porque isto é assim?

Nota: Estou ciente da diferença entre identidade (is) e igualdade (==), conforme descrito emEntendendo o operador "is" do Python. Além disso, também estou ciente do cache que está sendo executado pelo python para os números inteiros no intervalo[-5, 256] como descrito emO operador "is" se comporta inesperadamente com números inteiros.

estenão é o caso aqui já que os números estão fora desse intervalo eeu faço quer avaliar a identidade enão igualdade.

questionAnswers(2)

yourAnswerToTheQuestion