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.