擅长:python、mysql、java
<p>一般来说,打破身份意味着相等的假设可能会破坏Python中的各种事情。的确,NaN打破了这个假设,因此NaN打破了Python中的一些东西。讨论可以在<a href="http://bugs.python.org/issue4296">this Python bug</a>中找到。在python3.0的预发行版本中,不再依赖于这个假设,但是解决这个错误的方法是将它放回原位(即,让python3提供与python2相同的行为,在python2中,身份检查快捷方式已经完成)。python3的<a href="https://docs.python.org/3/reference/expressions.html#comparisons">documentation</a>正确地表示:</p>
<blockquote>
<p>For container types such as list, tuple, set, frozenset, dict, or collections.deque, the expression <code>x in y</code> is equivalent to <code>any(x is e or x == e for e in y)</code>.</p>
</blockquote>
<p>但是,Python 2的文档似乎不正确,因为它说:</p>
<blockquote>
<p>For the list and tuple types, x in y is true if and only if there exists an index i such that x == y[i] is true.</p>
</blockquote>
<p>如果你愿意的话,你可以提出一个文档错误,尽管这是一个相当深奥的问题,所以我怀疑它是否会在任何人的优先权列表中占据重要位置。在</p>