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

Python 当nan==nan为False时,为什么(nan,)==(nan,)为True?,python,tuples,Python,Tuples,我只是觉得这有点奇怪。环境是pythonv3,虽然它的表达式在我看来很好 import numpy as np np.nan==np.nan 要在元组中使用时返回False: (np.nan,)==(np.nan,) 它返回numpy文档中提到的True: np.nan==np.nan总是假的!改用特殊的numpy函数 我假设在比较元组时,值会被一个接一个地检查,但幕后检查不同于显式比较,尤其是对于=检查 例如,通过比较id(elem)值进行检查,对于两个不同的numpy.nan,id(el

我只是觉得这有点奇怪。环境是
pythonv3
,虽然它的表达式在我看来很好

import numpy as np
np.nan==np.nan
要在元组中使用时返回
False

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

它返回numpy文档中提到的
True

np.nan==np.nan总是假的!改用特殊的numpy函数

我假设在比较元组时,值会被一个接一个地检查,但幕后检查不同于显式比较,尤其是对于
=
检查

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


此外,您还可以检查
numpy.nan
的神奇实现,这可能会让您更清楚地了解比较动作背后的情况。

因为。处理的元组相等与nan相等不同?除此之外-您可能希望使用
np.isnan(np.nan)
-这将导致True-因此可能Tuple使用正确的nan检测。。。只是一个猜测。好吧,我不认为它是复制品。这是关于元组未列出的问题。当成员资格测试和元组相等检查标识时,这些问题并不相同。根据“内置容器通常假定相同的对象等于它们自己”。因此,
nan
特定的不相等性从未测试过。另外,
array.array('f',[math.nan])
将其与自身进行比较。