Unerwartetes Verhalten des „is“-Operators mit Ganzzahlen
Pythons „is“-Operator wird verwendet, um die Identität zweier Objekte zu vergleichen. Im angegebenen Code erscheint das folgende Verhalten unerwartet:
>>> a = 256 >>> b = 256 >>> a is b True # Expected result >>> a = 257 >>> b = 257 >>> a is b False # This is surprising, despite both values being equal.
Um dieses Verhalten zu verstehen, müssen wir Pythons Implementierung von Ganzzahlen betrachten. Kleine Ganzzahlen (insbesondere solche zwischen -5 und 256) speichert Python als unveränderliche Objekte. Wenn mehrere Variablen auf eine so kleine Ganzzahl verweisen, verweisen sie alle auf dasselbe zugrunde liegende Objekt.
Dies erklärt den ersten Vergleich, bei dem sowohl a als auch b Verweise auf dasselbe Objekt sind und daher b „True“ zurückgibt. Allerdings behandelt Python ganze Zahlen größer als 256 als neue Objekte, sodass a = 257 und b = 257 separate Objekte erstellen und a is b korrekterweise False zurückgibt.
Um zu vermeiden, dass Sie sich auf dieses Implementierungsdetail verlassen, ist es Es ist besser, zwei beliebige Objekte mit == zu vergleichen, dem Gleichheitsoperator, der den Wert des Objekts unabhängig von seiner Identität auf Gleichheit prüft.
Das obige ist der detaillierte Inhalt vonWarum verhält sich der „is'-Operator von Python bei Ganzzahlen unerwartet?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!