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

  • Official Android Tips

    Official And

    23 EYLÜL 2009
  • HTC Tutorials

    HTC Tutorial

    21 EYLÜL 2010
  • infiniTuts

    infiniTuts

    18 Ocak 2012