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.