Python None-Vergleich: Wann sollte „is“ vs. == verwendet werden?
Bei der Arbeit mit dem None-Wert in Python verwenden Entwickler häufig sowohl „is“ als auch „==“ zum Vergleich. Obwohl beide Ansätze syntaktisch gültig sind, hängt die empfohlene Wahl vom beabsichtigten Zweck des Vergleichs ab.
Im Allgemeinen wird „ist“ bevorzugt, wenn die Objektidentität überprüft wird, d. h. ob zwei Variablen auf genau dasselbe Objekt im Speicher verweisen . Im Gegensatz dazu prüft „==" auf Gleichheit, die je nach Implementierung des Objekts variieren kann.
Betrachten Sie die folgende benutzerdefinierte Klasse, die die Methode eq überschreibt, um Äquivalenz anders als die Objektidentität zu definieren:
class Negator(object): def __eq__(self,other): return not other thing = Negator() print(thing == None) # True print(thing is None) # False
In diesem Beispiel gibt „==" True zurück, da die Methode eq von Negator das Standardverhalten überschreibt. „is“ gibt jedoch „Falsch“ zurück, da sich die beiden Variablen nicht auf dasselbe Objekt beziehen.
Beim Umgang mit benutzerdefinierten Klassen, bei denen die Objektidentität nicht entscheidend ist, ist „==" die geeignete Wahl zur Überprüfung der Gleichheit. Wenn Sie beispielsweise den Inhalt zweier Listen vergleichen möchten, verwenden Sie „==":
lst = [1,2,3] lst == lst[:] # This is True since the lists are "equivalent" lst is lst[:] # This is False since they're actually different objects
Im Gegensatz dazu möchten Sie gezielt prüfen, ob zwei Variablen auf genau dasselbe Objekt verweisen Im Speicher ist „is“ der bevorzugte Vergleichsoperator. Dies ist besonders wichtig, wenn Sie mit veränderlichen Objekten wie Wörterbüchern oder Listen arbeiten, bei denen sich die Änderung einer Instanz auf die andere auswirken kann, wenn es sich um dasselbe Objekt handelt:
a = [1, 2, 3] b = a b.append(4) print(a, b) # Output: [1, 2, 3, 4], [1, 2, 3, 4] c = [1, 2, 3] d = c d is c # True (same object in memory)
Das obige ist der detaillierte Inhalt vonPython None-Vergleich: Wann sollte ich „is' vs. „==' verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!