SORU
20 Kasım 2008, PERŞEMBE


Python's "" operatör beklenmedik bir tamsayı olarak davranır

Neden aşağıdaki Python beklenmedik şekilde davranıyor?

>>> a = 256
>>> b = 256
>>> a is b
True           # This is an expected result
>>> a = 257
>>> b = 257
>>> a is b
False          # What happened here? Why is this False?
>>> 257 is 257
True           # Yet the literal numbers compare properly

Python 2.5.2 kullanıyorum. Python bazı farklı sürümleri çalışıyor, Python 2.3.3 99 ile 100 arasında yukarıdaki davranışları gösteren görünür.

Yukarıdaki dayanarak, Python içten "tamsayı, büyük tamsayı daha farklı bir şekilde saklanır ve is operatör farkı söyleyebilir." küçük gibi uygulanır zamanla, yıldız edebilirim Neden sızdıran soyutlama? İki rasgele nesneleri aynı ve sayılar olup olmadıklarını önceden bilmiyorum olup olmadığını görmek karşılaştırarak daha iyi bir yolu nedir?

CEVAP
20 Kasım 2008, PERŞEMBE


Bu bir göz atın:

>>> a = 256
>>> b = 256
>>> id(a)
9987148
>>> id(b)
9987148
>>> a = 257
>>> b = 257
>>> id(a)
11662816
>>> id(b)
11662828

EDİT: Burada, 5**: Python belgelerinde ne buldum

Geçerli bir uygulama tutar tüm tamsayı nesneleri dizisi -5 arasında tamsayılar ve 256, bu aralıktaki bir int oluşturun aslında sadece bir başvuru geri mevcut nesne. Yani mümkün 1 değerini değiştirmek için. Ben davranışlarında Python şüpheli bu durum, tanımlanmamış. :-)

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Ciaran Blumenfeld

    Ciaran Blume

    20 NİSAN 2009
  • DavidParody

    DavidParody

    17 EKİM 2009
  • Jabari Johnson

    Jabari Johns

    18 Ocak 2008