"ist" - operator verhält sich unerwartet mit Ganzzahlen

Warum hat die folgenden Verhalten sich unerwartet in Python?

>>> 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 bin mit Python-2.5.2. Versuchen Sie einige verschiedene Versionen von Python, es wird angezeigt, dass Python 2.3.3 zeigt das obige Verhalten zwischen 99 und 100.

Basierend auf den oben genannten, kann ich vermuten, dass Python ist intern umgesetzt, so dass "kleine" ganze zahlen werden gespeichert in einer anderen Weise als größere Ganzzahlen und die is Betreiber kann sagen, der Unterschied. Warum der undicht Abstraktion? Was ist eine bessere Möglichkeit zum Vergleich zweier beliebiger Objekte, um zu sehen, ob Sie identisch sind, wenn ich nicht im Voraus wissen, ob Sie zahlen oder nicht?

Werfen Sie einen Blick hier > Die aktuelle Umsetzung hält ein array von integer-Objekte für alle > ganze zahlen zwischen -5 und 256, wenn Sie erstellen ein int-in diesem Bereich > eigentlich nur wieder eine Referenz auf das vorhandene Objekt.

InformationsquelleAutor Greg Hewgill | 2008-11-20

Schreibe einen Kommentar