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

  • Harvest: Greg Laurie

    Harvest: Gre

    6 HAZİRAN 2006
  • iBand IguJoo

    iBand IguJoo

    25 AĞUSTOS 2006
  • Music EuroDance 2

    Music EuroDa

    12 Mayıs 2011