Оператор 'is' ведет себя неожиданно с плавающей точкой

Я столкнулся с запутанной проблемой при модульном тестировании модуля. Модуль на самом деле приводит значения, и я хочу сравнить эти значения.

Есть разница по сравнению с== а такжеis (частично, я остерегаюсь разницы)

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

Как и ожидалось до сих пор, но вот моя «проблема»:

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

Зачем? По крайней мере, последний действительно смущает меня. Внутреннее представлениеfloat(0) а такжеfloat(0.0) должно быть равным. В сравнении с== работает как положено.

Ответы на вопрос(2)

Ваш ответ на вопрос