El operador 'is' se comporta inesperadamente con flotantes

Me encontré con un problema confuso cuando la unidad prueba un módulo. El módulo en realidad está emitiendo valores y quiero comparar estos valores.

Hay una diferencia en comparación con== yis (en parte, tenga cuidado con la diferencia)

>>> 0.0 is 0.0
True   # as expected
>>> float(0.0) is 0.0
True   # as expected

Como se esperaba hasta ahora, pero aquí está mi "problema":

>>> float(0) is 0.0
False
>>> float(0) is float(0)
False

¿Por qué? Al menos el último es realmente confuso para mí. La representación interna defloat(0) yfloat(0.0) debería ser igual Comparar con== Funciona como se esperaba.

Respuestas a la pregunta(2)

Su respuesta a la pregunta