为什么当nan == nan为False时(nan,)==(nan,)为True?

时间:2019-11-17 11:06:29

标签: python tuples

我只是觉得这有点奇怪。环境是Python v3,对于我来说,表达式看起来不错

import numpy as np
np.nan==np.nan

在元组中使用时返回False

(np.nan,)==(np.nan,)

它返回True

1 个答案:

答案 0 :(得分:1)

如numpy文档中所述:

  

np.nan == np.nan#始终为False!请改用特殊的numpy函数。

我假设在比较元组时,将依次检查值,但是在幕后进行的检查与显式比较不同,尤其是对于==检查。

例如,通过比较id(elem)值进行检查,对于两个不同的numpy.nan,id(elem)值必须相同,因此返回true。同样,很可能在非cpython实现上,由于内部优化用于存储变量值,结果可能是错误的。

此外,您可以签出numpy.nan的魔术实现,它可以使您更加了解比较动作在幕后发生的事情。