Python Quick Tip: Unterschied zwischen "==" und "is"
Inhaltsverzeichnis:
- Einleitung
- Der Unterschied zwischen "==" und "is" in Python
- Beispiele mit realen Objekten
- Codebeispiele zur Veranschaulichung
- Unterschied zwischen "==" und "is" in Listen
- Veränderliche und unveränderliche Objekte
- Verwendung des "is" Schlüsselworts mit Listen
- Überprüfung der Speicheradressen mit der "id" Funktion
- Zusammenfassung
- FAQ
Der Unterschied zwischen "==" und "is" in Python
In Python gibt es zwei Möglichkeiten, Vergleiche zwischen Objekten durchzuführen: Das Doppelgleichheitszeichen (==
) und das "is" Schlüsselwort. Obwohl diese beiden oft synonym verwendet werden, gibt es einen wichtigen Unterschied zwischen ihnen. In diesem Artikel werden wir uns genauer damit befassen und Beispiele sowohl mit realen Objekten als auch mit Codebeispielen geben, um zu verdeutlichen, wie sie funktionieren.
Beispiele mit realen Objekten
Um den Unterschied zwischen "==" und "is" zu verstehen, betrachten wir ein Beispiel mit realen Objekten. Stellen Sie sich vor, Sie und Ihr Bruder haben jeweils eine Dose Softdrink auf einer Party. Ihr Bruder hat eine Dose Cola und Sie haben eine Dose Pepsi.
- Wenn wir diese beiden Dosen mit dem Doppelgleichheitszeichen (
==
) vergleichen, werden sie nicht als gleich angesehen, da es sich um unterschiedliche Softdrinks handelt.
- Wenn wir sie jedoch mit dem "is" Schlüsselwort vergleichen, werden sie auch nicht als gleich angesehen, da es sich um verschiedene Objekte handelt.
Nun, nehmen wir an, Ihr Bruder und Sie haben beide Dosen Pepsi. Wenn wir sie mit dem Doppelgleichheitszeichen (==
) vergleichen, können wir sie als gleich betrachten, da sie den gleichen Inhalt haben. Allerdings sind sie immer noch verschiedene Objekte.
Wenn Sie und Ihr Bruder jedoch dieselbe Dose Pepsi teilen, indem Sie beide Variablen darauf verweisen lassen, dann werden sie mit dem Doppelgleichheitszeichen (==
) als gleich betrachtet, da sie dasselbe Objekt teilen.
Codebeispiele zur Veranschaulichung
Nun werfen wir einen Blick auf einige Codebeispiele, um den Unterschied zwischen "==" und "is" deutlicher zu machen. Zuerst erstellen wir zwei verschiedene Listen:
l1 = [1, 2, 3, 4, 5]
l2 = [1, 2, 4, 5]
Wenn wir diese beiden Listen mit dem Doppelgleichheitszeichen (==
) vergleichen, erhalten wir False
, da sie unterschiedliche Werte haben.
Umgekehrt, wenn wir sie mit dem "is" Schlüsselwort vergleichen, erhalten wir ebenfalls False
, da es sich um verschiedene Objekte handelt.
Jetzt setzen wir die Listen auf die gleichen Werte und überprüfen erneut:
l1 = [1, 2, 3, 4, 5]
l2 = [1, 2, 3, 4, 5]
if l1 == l2:
print(True)
else:
print(False)
Dieses Mal erhalten wir True
, da die Listen den gleichen Wert haben. Beachten Sie jedoch, dass dies nicht bedeutet, dass sie dasselbe Objekt sind.
Um festzustellen, ob sie dasselbe Objekt sind, verwenden wir das "is" Schlüsselwort:
if l1 is l2:
print(True)
else:
print(False)
In diesem Fall erhalten wir False
, da es sich immer noch um verschiedene Objekte handelt.
Unterschied zwischen "==" und "is" in Listen
Bei der Verwendung von Listen in Python spielt der Unterschied zwischen "==" und "is" eine noch wichtigere Rolle.
Listen sind veränderliche Objekte, dh sie können nach ihrer Erstellung verändert werden. Wenn wir zwei Listen erstellen und sie gleich setzen, erhalten wir tatsächlich zwei verschiedene Listenobjekte:
l1 = [1, 2, 3, 4, 5]
l2 = [1, 2, 3, 4, 5]
if l1 == l2:
print(True)
else:
print(False)
if l1 is l2:
print(True)
else:
print(False)
Beide Vergleiche ergeben True
, da die Listen den gleichen Wert haben, aber unterschiedliche Objekte sind.
Veränderliche und unveränderliche Objekte
Es ist wichtig, den Unterschied zwischen veränderlichen und unveränderlichen Objekten in Python zu verstehen, um den Unterschied zwischen "==" und "is" zu verstehen.
Unveränderliche Objekte sind solche, deren Werte nach ihrer Erstellung nicht geändert werden können. Beispiele für unveränderliche Objekte in Python sind Ganzzahlen, Gleitkommazahlen, Zeichenketten und Tupel.
Veränderliche Objekte können jedoch nach ihrer Erstellung verändert werden. Beispiele für veränderliche Objekte sind Listen, Mengen und Wörterbücher.
Verwendung des "is" Schlüsselworts mit Listen
Wenn wir das "is" Schlüsselwort mit Listen verwenden, überprüfen wir nicht nur, ob die Werte gleich sind, sondern auch, ob es sich um dasselbe Objekt handelt.
l1 = [1, 2, 3, 4, 5]
l2 = l1
if l1 is l2:
print(True)
else:
print(False)
In diesem Fall erhalten wir True
, da l1
und l2
auf dasselbe Listenobjekt verweisen.
Wenn wir nun den Wert eines Elements in l1
ändern, wird sich auch der Wert in l2
ändern, da sie dasselbe Objekt teilen:
l1[0] = 6
print(l1)
print(l2)
Die Ausgabe zeigt, dass sich der Wert sowohl in l1
als auch in l2
geändert hat.
Überprüfung der Speicheradressen mit der "id" Funktion
Um die Speicheradressen von Objekten in Python zu überprüfen, können wir die id
Funktion verwenden. Diese Funktion gibt eine eindeutige Kennung für ein Objekt zurück.
l1 = [1, 2, 3, 4, 5]
l2 = l1
print(id(l1))
print(id(l2))
Die Ausgabe zeigt, dass die Speicheradressen von l1
und l2
identisch sind, da sie auf dasselbe Objekt verweisen.
Um festzustellen, ob die Speicheradressen gleich sind, können wir dies auch mit dem Doppelgleichheitszeichen (==
) überprüfen:
if id(l1) == id(l2):
print(True)
else:
print(False)
Dies ergibt ebenfalls True
.
Zusammenfassung
Der Unterschied zwischen dem Doppelgleichheitszeichen (==
) und dem "is" Schlüsselwort in Python liegt darin, dass das Doppelgleichheitszeichen den Wert der Objekte vergleicht, während das "is" Schlüsselwort überprüft, ob es sich um dasselbe Objekt handelt.
Es ist wichtig zu verstehen, dass das "is" Schlüsselwort nicht immer verwendet werden sollte, um Gleichheit zwischen Objekten zu überprüfen. In den meisten Fällen möchten wir den Wert der Objekte vergleichen, nicht ihre Identität.
In einigen speziellen Fällen, wie der Überprüfung von Listen, kann das "is" Schlüsselwort jedoch hilfreich sein, um festzustellen, ob es sich um dasselbe Objekt handelt, insbesondere wenn die Objekte veränderlich sind.
FAQ
Frage: Warum sind Objekte einer Klasse keine unveränderlichen Objekte?
Antwort: Objekte einer Klasse sind in der Regel veränderliche Objekte, da sie nach ihrer Erstellung geändert werden können. Das liegt daran, dass Klassen in der Regel Attribute haben, die wir bearbeiten können. Wenn Sie jedoch eine unveränderliche Klasse erstellen möchten, können Sie dies tun, indem Sie die __setattr__
Methode entsprechend ändern.
Frage: Wie überprüfe ich, ob zwei Zeichenketten Objekte gleich sind?
Antwort: Sie können das Doppelgleichheitszeichen (==
) verwenden, um zu überprüfen, ob zwei Zeichenketten den gleichen Wert haben. Zum Beispiel:
s1 = "Hallo"
s2 = "Hallo"
if s1 == s2:
print(True)
else:
print(False)
Die Ausgabe wäre True
, da beide Zeichenketten den gleichen Inhalt haben.
Frage: Kann ich das "is" Schlüsselwort verwendet, um die Gleichheit von zwei Wörterbuch-Objekten zu überprüfen?
Antwort: Das "is" Schlüsselwort überprüft die Identität von Objekten in Bezug auf ihre Speicheradressen. Bei Wörterbuch-Objekten können die Werte unabhängig von ihrer Identität gleich sein. Um also die Gleichheit von zwei Wörterbuch-Objekten zu überprüfen, sollten Sie das Doppelgleichheitszeichen (==
) verwenden.
Frage: Gibt es unterschiedliche Verhaltensweisen von "==" und "is" in anderen Programmiersprachen?
Antwort: Ja, andere Programmiersprachen haben möglicherweise unterschiedliche Verhaltensweisen von Vergleichsoperatoren. Es ist wichtig, die Dokumentation Ihrer verwendeten Programmiersprache zu konsultieren, um das genaue Verhalten herauszufinden.