【发布时间】:2014-02-13 02:04:09
【问题描述】:
所以,这很有趣——众所周知,Python 的 hash 在 hash(-1) == hash(-2)、as discussed elsewhere 上返回 True,但是这个呢?
>>> hash( (-2,2) ) == hash( (2,-2) )
True
这是一个功能吗?
其他一些快速实验:
>>>(-2,2) == (2,-2)
False
>>>hash( (-1,) ) == hash( (-2,) )
True
>>>hash( (-1,-2) ) == hash( (-2,-1) )
True
>>>hash( (-2.01,2.01) ) == hash( (2.01,-2.01) )
False
>>>hash( (-1,1) ) == hash( (1,-1) )
False
【问题讨论】:
-
那会是什么功能?我倾向于说它“显然”不是一个特性,因为你希望你的哈希函数不具有这些属性。你的问题是什么?
-
顺便说一句,你可能打算写
(-1,),因为额外的一对括号是多余的 -
嗯,
hash(-1) == hash(-2)是一个功能,因为它不是一个错误,而且它是有原因的(上面的链接)。这是否有类似的解释 - 或者它只是一个奇怪的?这是我的问题。 -
这不是错误,因为无法避免哈希冲突。它当然不是一个功能,只是一个解决方法/实现细节。它也很可能是依赖于实现的,所以它与 Python 关系不大,更多的是与 cpython 实现有关(你在 pypy 或 ironpython 中尝试过吗?)
-
@TomStephens 请查看我的答案以获得全面的解释。