Heim > Artikel > Backend-Entwicklung > Warum verhält sich der Python-Operator „is“ bei großen Ganzzahlen in verschiedenen Codeblöcken unterschiedlich?
In Python prüft der is-Operator die Objektidentität und nicht die Äquivalenz. In bestimmten Szenarien kann dieses Verhalten jedoch unerwartet sein, wie unten gezeigt:
<code class="python">def func(): a = 1000 b = 1000 return a is b a = 1000 b = 1000 print(a is b, func()) # (False, True)</code>
Der is-Vergleich gibt innerhalb der Funktion True zurück, außerhalb jedoch False. Trotz der unterschiedlichen Auswertungsergebnisse scheinen die Ganzzahlen a und b den gleichen Wert zu haben.
Um dieses Verhalten zu verstehen, ist die Interpretation von Codeblöcken durch den Python-Interpreter von entscheidender Bedeutung. Laut Python-Referenzhandbuch stellt jeder interaktiv ausgeführte Befehl einen separaten Codeblock dar. Als Blöcke gelten:
Innerhalb eines einzelnen Codeblocks speichert Python bestimmte Caches Objekte wie kleine Ganzzahlen (im Bereich [-5, 256]). Wenn mehrere Variablen auf dasselbe Ganzzahlliteral verweisen, verweisen sie alle auf dasselbe zwischengespeicherte Ganzzahlobjekt. Wenn die Literale jedoch in verschiedenen Codeblöcken deklariert werden, werden unterschiedliche Ganzzahlobjekte erstellt.
Um dies zu veranschaulichen, betrachten Sie die Codeobjekte für jeden Fall:
Als Ergebnis wird a und b innerhalb des Funktionsblocks, in dem sich alle Integer befinden, als True ausgewertet zwischengespeichert und False außerhalb des Blocks, wo separate Objekte erstellt werden.
Beachten Sie die folgenden Einschränkungen:
Das Verständnis des Konzepts der Codeblöcke in Python ist für die Interpretation unerwarteten Verhaltens bei Identitätsvergleichen von entscheidender Bedeutung. Während dies nützlich ist, um die Identität unveränderlicher Objekte zu überprüfen, wird empfohlen, den Gleichheitsoperator (==) zum Vergleichen von Werten zu verwenden, da er nicht auf Caching angewiesen ist.
Das obige ist der detaillierte Inhalt vonWarum verhält sich der Python-Operator „is“ bei großen Ganzzahlen in verschiedenen Codeblöcken unterschiedlich?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!