我们知道tuple对象是不可变的,因此可以清除.我们也知道它lists是可变的和不可清洗的.
这很容易说明
>>> set([1, 2, 3, (4, 2), (2, 4)])
{(2, 4), (4, 2), 1, 2, 3}
>>> set([1, 2, 3, [4, 2], [2, 4]])
TypeError: unhashable type: 'list'
Run Code Online (Sandbox Code Playgroud)
现在,hash在这种情况下,如果为了检查唯一性(例如,在构建集合时),我们仍然必须检查集合中的任何迭代中的每个单独项目吗?
我们知道两个对象可以具有相同的hash值,但仍然不同.所以,hash仅仅不足以比较对象.那么,哈希的重点是什么?为什么不直接检查迭代中的每个项目?
我的直觉是它可能是其中一个原因
hash只是一个(很快)的初步比较.如果hashes不同,我们知道对象是不同的.hash确定一个对象是可变的.这应该足以在与其他对象进行比较时引发异常:在该特定时间,对象可能相等,但可能稍后,它们不是.我是朝着正确的方向吗?或者我错过了重要的一部分?
谢谢