Konuya hakim değilim ama anladığım kadarını söyleyeyim,
Bu durum, söz konusu değerlerin adresleriyle alakalı.
Python’da id()
fonksiyonu ile değişkenlerin adres değerlerini elde edebiliyorsunuz.
is operatörü de iki değerin adreslerinin aynı olup olmadığına bakıyor.
Mesela,
a = 256
id(a) → 1458610727312
id(256) → 1458610727312
Buna bağlı olarak a is 256
bize True
değerini veriyor.
Şimdi ise 257 değerine bakalım.
a = 257
id(a) → 1458650914192
id(257) → 1458650912656
id(257) → 1458650914160
Yukarıda görüldüğü üzere, 257 değeri için her seferinde farklı bir adres değeri dönüyor. Buna bağlı olarak a is 257
bize False
değerini veriyor.
Yalnızca -5 ila 256 arasındaki sayıların adres değerleri sabit oluyor.
Bir siteden şöyle bir alıntı yapayım,
The current implementation keeps an array of integer objects for all integers between -5
and 256
, when you create an int in that range you actually just get back a reference to the existing object.
Yani -5 ila 256 arasındaki sayılar zaten öncesinde var edilmiş olduklarından, adresleri aynı. Fakat bu aralığın dışındaki sayılar yeniden oluşturulduğu için farklı adresler elde ediyoruz.
https://codeburst.io/the-unseen-pitfalls-of-python-7ca57f021d08