Das rätselhafte Verhalten des „is“-Operators bei Ganzzahlen
In Python prüft der „is“-Operator, ob zwei Objekte auf dasselbe Objekt verweisen in Erinnerung. Während dies normalerweise wie erwartet funktioniert, zeigt es unerwartetes Verhalten bei Ganzzahlen, was zu Verwirrung bei den Entwicklern führt.
Unerwartetes Ergebnis bei großen Ganzzahlen
Bedenken Sie den folgenden Code:
a = 256 b = 256 a is b # True (expected) a = 257 b = 257 a is b # False (unexpected)
Warum gibt der „is“-Operator im zweiten Vergleich „False“ zurück? Ist 257 nicht gleich 257?
CPython-Implementierungsdetail
Das seltsame Verhalten ist auf ein subtiles Implementierungsdetail in CPython zurückzuführen, dem am häufigsten verwendeten Python-Interpreter. Für Ganzzahlen zwischen -5 und 256 verwaltet CPython ein Array von Ganzzahlobjekten. Wenn Sie in diesem Bereich eine Ganzzahl erstellen, erhalten Sie lediglich einen Verweis auf das vorhandene Objekt im Array. Das bedeutet, dass der „is“-Operator für kleine ganze Zahlen innerhalb dieses Bereichs prüft, ob sie auf dasselbe Objekt im Array verweisen.
Konsequenzen und Implikationen
In der Beispiel oben: Wenn wir a und b 256 zuweisen, erhalten wir dasselbe Objekt aus dem Array. Daher wird „a ist b“ als wahr ausgewertet. Wenn wir jedoch a und b 257 zuweisen, erstellen wir zwei neue Objekte, die nicht identisch sind, was dazu führt, dass „a ist b“ „Falsch“ zurückgibt.
Alternative Vergleichsmethode
Um zwei beliebige Objekte unabhängig von ihrem Typ auf Gleichheit zu vergleichen, können Sie den Operator „==“ anstelle von „is“ verwenden. Dadurch werden die Werte der Objekte und nicht ihre Identität überprüft.
a = 257 b = 257 a == b # True
Denken Sie daran, dass der Operator „is“ nur verwendet werden sollte, wenn Sie überprüfen müssen, ob zwei Objekte auf genau dasselbe Objekt im Speicher verweisen. während „==“ zum Vergleichen von Werten verwendet werden sollte.
Das obige ist der detaillierte Inhalt vonWarum verhält sich der „is'-Operator von Python bei kleinen und großen ganzen Zahlen unterschiedlich?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!