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.
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.
a is 6 False yazım hatası yapmış olabilirsin a= -6 a is 6 demişsin -6 yazman gerek.
bool(a) True olur. False, 0 ve “” boşluk harici değerler True döndürür.
bu yorumda orasını yanlıs yazmısım ama hala vs codeda yazbel kitapta anlatıldıgı gibi true false alamadım, yani bu deger normalde a false vermesi lazım ama idle notepadde false veriyor vs codeda true veriyor. ben ilgili vs codeunu mu yazamadım bilmiyorum
Bu doğru değil. @bekirozcan’ın attığı linkte de anlatıldığı gibi mevcut implementasyon modüldeki tekrar eden unmutable literalleri tek bir değer halinde saklıyor. Ayrıca referans herhangi bir unmutable tip için interning uygulanmasını engellemiyor.
Anladim. Kitap, maalesef zaman zaman gereksiz detaylara girebiliyor. is operatorunun/obje identity’sinin calisma mantigi bunlardan bir tanesi. Interning, allocation havuzlari ve stratejileri gibi seyleri bilmeyen/bilmesi gerekmeyen insanlar icin fazla gereksiz bir detay. Giris seviyesi bir yazida yeri yok.
yazdıgım gibi aslında henuz cok cok yeniyim araştırırken nerelere geldik oldu biraz. yazbel kitaptaki bilgiler gerçekten cok guzel yazana yazanlara teşekkür ediyorum