Orlok: Python Vergleichsoperator Frage

Beitrag lesen

Hallo

eine Frage: Der Term x == y vergleicht meines Wissens die Operanden nicht anhand ihres Wertes sondern ihrer Identität.

Nein, in Python testet == auf Gleichheit. is testet auf Identität.

Ein Vergleich mit is kann allerdings überraschende Ergebnisse hervorbringen:

# Ergibt True
1 == 1

# Ergibt True
1 is 1


# Ergibt True
100000 == 10**5

# Ergibt False
100000 is 10**5

Das liegt daran, dass Python bestimmte Werte im Speicher vorhält. Für kleine Integer zum Beispiel wird nicht jedesmal Speicherplatz belegt. Es wird einfach auf dieselbe Stelle verwiesen. Da is Referenzen vergleicht, ergibt das dann True. Bei Werten, die nicht gecached wurden, ergibt der Vergleich False.

EDIT: Aus demselben Grund bekommst du von id() wie in deinem Beispiel mit der Zahl 2 dasselbe Ergebnis. Übergibst du größere Zahlen, zum Beispiel 1000, sieht das dann anders aus, da für diese Werte dann neuer Speicher belegt wird.

Eigentlich kann einem dieses Implementierungsdetail aber auch egal sein: Wenn du Zahlen vergleichst, dann willst du in der Regel deren Wert vergleichen, also verwende ==.

Viele Grüße,

Orlok

--
„Dance like it hurts.
Make love like you need money.
Work when people are watching.“ — Dogbert