Python Vergleichsoperator Frage
bearbeitet von OrlokHallo
> 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:
~~~Python
# 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 Implementierungsdetails 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
Python Vergleichsoperator Frage
bearbeitet von OrlokHallo
> 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:
~~~Python
# 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`.
Viele Grüße,
Orlok
--
„Dance like it hurts.
Make love like you need money.
Work when people are watching.“ — Dogbert
Python Vergleichsoperator Frage
bearbeitet von OrlokHallo
> 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:
~~~Python
# Ergbit True
1 == 1
# Ergibt True
1 is 1
# Ergbit True
100000 == 10**5
# Ergbit 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`.
Viele Grüße,
Orlok
--
„Dance like it hurts.
Make love like you need money.
Work when people are watching.“ — Dogbert