'is' Operator verhält sich unerwartet mit floats
Ich bin beim Testen eines Moduls auf ein verwirrendes Problem gestoßen. Das Modul wandelt tatsächlich Werte um und ich möchte diese Werte vergleichen.
Es gibt einen Unterschied zu==
undis
(zum Teil bin ich auf der Hut vor dem Unterschied)
>>> 0.0 is 0.0
True # as expected
>>> float(0.0) is 0.0
True # as expected
Wie bisher erwartet, aber hier ist mein "Problem":
>>> float(0) is 0.0
False
>>> float(0) is float(0)
False
Warum? Zumindest der letzte ist wirklich verwirrend für mich. Die interne Darstellung vonfloat(0)
undfloat(0.0)
sollte gleich sein. Im Vergleich mit==
funktioniert wie erwartet.