'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.