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?