Python Vergleichsoperator Frage
Klaus Mennward
- python
1 Orlok
Hallo,
eine Frage: Der Term x == y vergleicht meines Wissens die Operanden nicht anhand ihres Wertes sondern ihrer Identität.
Die Identität wird ja mit der Funktion id() abgefragt.
a = 2
b = 2
id(a)
10088320
id(b)
10088320
Ich frage mich nun, warum 1 == 1.0 wahr ist. Die Identität von 1 und 1.0 ist logischerweise nicht die selbe ( in C ist 1 == 1.0 wahr, aber hier erscheint es mir einleuchtender).
Weiss das jemand? Vermutlich stimmt das mit der Identität nicht und ich habe hier altes, falsches Wissen. Konnte im interdings aber nichts finden.
Verwirrt Klaus
`
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