Оператор '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)
должно быть равным. В сравнении с==
работает как положено.