Heim >Backend-Entwicklung >Python-Tutorial >Warum verhält sich der „is'-Operator von Python bei kleinen und großen ganzen Zahlen unterschiedlich?

Warum verhält sich der „is'-Operator von Python bei kleinen und großen ganzen Zahlen unterschiedlich?

Linda Hamilton
Linda HamiltonOriginal
2024-12-24 04:56:14543Durchsuche

Why Does Python's `is` Operator Behave Differently with Small and Large Integers?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn