617 Stimmen

Der Operator "is" verhält sich unerwartet bei ganzen Zahlen

Warum verhält sich das Folgende in Python unerwartet?

>>> 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

Ich verwende Python 2.5.2. Beim Ausprobieren verschiedener Python-Versionen scheint es, dass Python 2.3.3 das obige Verhalten zwischen 99 und 100 zeigt.

Auf der Grundlage der obigen Ausführungen kann ich die Hypothese aufstellen, dass Python intern so implementiert ist, dass "kleine" ganze Zahlen auf andere Weise gespeichert werden als größere ganze Zahlen und die is Betreiber den Unterschied erkennen kann. Warum die undichte Abstraktion? Wie kann ich zwei beliebige Objekte besser vergleichen, um festzustellen, ob sie gleich sind, wenn ich nicht im Voraus weiß, ob es sich um Zahlen handelt oder nicht?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X