Beim Experimentieren mit Pythons Interpreter wurde ein Paradoxon bezüglich des „ ist'-Operator. Insbesondere gibt „is“ „True“ zurück, wenn es innerhalb einer Funktion ausgewertet wird, aber „False“, wenn es außerhalb davon ausgewertet wird:
>>> def func(): ... a = 1000 ... b = 1000 ... return a is b ... >>> a = 1000 >>> b = 1000 >>> a is b, func() (False, True)
Da „is“ die „id“ des Objekts auswertet, impliziert dies, dass innerhalb der „func“-Funktion „a“ und „b“ beziehen sich auf dieselbe int-Instanz. Außerhalb der Funktion verweisen sie jedoch auf unterschiedliche Objekte. Warum ist das so?
Das Python-Referenzhandbuch bietet eine aufschlussreiche Erläuterung:
„Ein Block ist ein Stück Python-Programmtext, der als Einheit ausgeführt wird.“ . Jeder interaktiv eingegebene Befehl ist ein Block. Geben Sie den gleichen Wert zurück, was zu einer True-Auswertung führt.
Außerhalb der Funktion haben wir zwei separate Codeobjekte, jedes mit seinem Objekt für 1000. Daher sind 'id(a)' und 'id(b) ' sind unterschiedlich, was zu einer falschen Auswertung führt.
Diese Eigenart gilt nicht nur für Ganzzahlen. Ähnliche Ergebnisse werden beispielsweise mit Float-Literalen beobachtet. Denken Sie daran, dass vom Vergleich von Objekten auf Identität (mithilfe von „ist“) generell abgeraten wird; Stattdessen sollte der Gleichheitsoperator ('==') verwendet werden.
Code-Demonstration
Wir haben eine einzelne „int“-Instanz für 1000, die sowohl „a“ als auch „b“ zugewiesen ist.
>>> print(dis.code_info(func)) ... Constants: 0: None 1: 1000
Wir sehen, dass jedes Codeobjekt seine Instanz von 1000 hat, was zur Falschauswertung führt.
>>> com1 = compile("a=1000", filename="", mode="single") >>> com2 = compile("b=1000", filename="", mode="single") >>> id(com1.co_consts[0]) == id(com2.co_consts[0]) False
Hinweise
Diese Beobachtung bezieht sich auf CPython, die am weitesten verbreitete Python-Implementierung.Das obige ist der detaillierte Inhalt vonWarum verhält sich der \'is\'-Operator bei nicht zwischengespeicherten Ganzzahlen innerhalb und außerhalb einer Funktion in Python unterschiedlich?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!