Heim >Backend-Entwicklung >Python-Tutorial >Warum verhält sich der „is'-Operator von Python bei bestimmten Ganzzahlen unerwartet?
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!