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

  • 3dmmfavs

    3dmmfavs

    29 Kasım 2009
  • TROPFEST

    TROPFEST

    27 Mart 2007
  • WestsideMrArO

    WestsideMrAr

    6 EKİM 2010