Heim >Backend-Entwicklung >Python-Tutorial >Warum verhält sich der „is'-Operator von Python bei bestimmten Ganzzahlen unerwartet?

Warum verhält sich der „is'-Operator von Python bei bestimmten Ganzzahlen unerwartet?

Barbara Streisand
Barbara StreisandOriginal
2024-12-27 16:37:111006Durchsuche

Why Does Python's

Unerwartetes Verhalten des „is“-Operators mit Ganzzahlen

Der „is“-Operator in Python vergleicht die Objektidentität und testet, ob sich zwei Variablen darauf beziehen das gleiche exakte Objekt im Gedächtnis. Beim Vergleich von Ganzzahlen kann es jedoch zu unerwartetem Verhalten kommen.

Betrachten Sie das folgende Beispiel in Python 2.5.2:

>>> a = 256
>>> b = 256
>>> a is b
True           # Expected result
>>> a = 257
>>> b = 257
>>> a is b
False          # Unexpected result

Warum gibt der „is“-Operator beim Vergleich von Ganzzahlen 257 False zurück?

Die Antwort liegt in der Art und Weise, wie Python intern kleine ganze Zahlen darstellt. Laut Python-Dokumentation werden Ganzzahlen zwischen -5 und 256 in einem vorab zugewiesenen Array gespeichert. Wenn Sie eine Ganzzahl in diesem Bereich erstellen, erhalten Sie tatsächlich einen Verweis auf das entsprechende Array-Element.

Das bedeutet, dass der „is“-Operator für Ganzzahlen zwischen -5 und 256 im Wesentlichen Speicheradressen statt Ganzzahlen vergleicht Werte. Im obigen Beispiel verweisen a und b beide auf dasselbe Element im Array, daher das Ergebnis „True“.

Für ganze Zahlen außerhalb dieses Bereichs verhält sich der „is“-Operator jedoch wie erwartet. Es vergleicht die tatsächlichen Ganzzahlwerte, nicht die Speicheradressen.

Wenn Sie zwei Objekte unbekannten Typs vergleichen müssen, unabhängig davon, ob es sich um Ganzzahlen handelt oder nicht, können Sie zum Abrufen die Funktion „id()“ verwenden ihre Speicheradressen und vergleichen Sie diese stattdessen:

>>> a = 257
>>> b = 257
>>> id(a) == id(b)
False

Das obige ist der detaillierte Inhalt vonWarum verhält sich der „is'-Operator von Python bei bestimmten Ganzzahlen unerwartet?. 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