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

  • Google Developers

    Google Devel

    23 AĞUSTOS 2007
  • Neil Cicierega

    Neil Ciciere

    22 Mart 2006
  • SavageLuxxxGaming - Daily NBA 2K15 & NBA Live 15 Enjoy And Subscribe!

    SavageLuxxxG

    11 Ocak 2013