Heim  >  Artikel  >  Backend-Entwicklung  >  Warum verhält sich der „is'-Operator bei nicht zwischengespeicherten Ganzzahlen innerhalb und außerhalb von Funktionen in Python unterschiedlich?

Warum verhält sich der „is'-Operator bei nicht zwischengespeicherten Ganzzahlen innerhalb und außerhalb von Funktionen in Python unterschiedlich?

Linda Hamilton
Linda HamiltonOriginal
2024-11-02 16:42:29723Durchsuche

Why does the `is` operator behave differently with non-cached integers inside and outside functions in Python?

Der is-Operator verhält sich unerwartet bei nicht zwischengespeicherten Ganzzahlen


Der is-Operator in Python wird verwendet, um die Identität zweier Zahlen zu vergleichen Objekte, d. h. es prüft, ob sie auf dasselbe Objekt im Speicher verweisen. Beim Umgang mit nicht zwischengespeicherten Ganzzahlen kann sich der is-Operator jedoch unerwartet verhalten.


Wenn Sie den is-Operator für zwei ganze Zahlen innerhalb einer Funktion auswerten, wird True zurückgegeben. Dies zeigt an, dass sie sich auf dasselbe Objekt beziehen. Wenn Sie jedoch denselben is-Operator außerhalb der Funktion auswerten, wird False zurückgegeben, was darauf hinweist, dass sie sich auf verschiedene Objekte beziehen.


Dies liegt an der Art und Weise, wie Python das Integer-Caching handhabt. Für Ganzzahlen im Bereich [-5, 256] speichert Python die Ganzzahlobjekte zwischen und verwendet sie für nachfolgende Referenzen wieder. Das bedeutet, dass, wenn Sie mehreren Variablen innerhalb einer Funktion eine Ganzzahl innerhalb dieses Bereichs zuweisen, diese alle auf dasselbe zwischengespeicherte Objekt verweisen und daher der is-Operator „True“ zurückgibt.


Allerdings wenn Wenn Sie außerhalb einer Funktion eine Ganzzahl zuweisen, wird ein neues Ganzzahlobjekt erstellt und das zwischengespeicherte Objekt nicht verwendet. Wenn Sie also zwei ganze Zahlen außerhalb einer Funktion vergleichen, verweisen diese auf unterschiedliche Objekte und der is-Operator gibt False zurück.


Um dieses unerwartete Verhalten zu vermeiden, wird empfohlen, den Gleichheitsoperator zu verwenden (==) zum Vergleichen der Werte von Ganzzahlen anstelle des is-Operators.

Das obige ist der detaillierte Inhalt vonWarum verhält sich der „is'-Operator bei nicht zwischengespeicherten Ganzzahlen innerhalb und außerhalb von Funktionen in Python 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