小编Oli*_*ver的帖子

如果我们还需要检查每个项目,hash的含义是什么?

我们知道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仅仅不足以比较对象.那么,哈希的重点是什么?为什么不直接检查迭代中的每个项目?

我的直觉是它可能是其中一个原因

  1. hash只是一个(很快)的初步比较.如果hashes不同,我们知道对象是不同的.
  2. hash确定一个对象是可变的.这应该足以在与其他对象进行比较时引发异常:在该特定时间,对象可能相等,但可能稍后,它们不是.

我是朝着正确的方向吗?或者我错过了重要的一部分?

谢谢

python hash types set python-3.x

5
推荐指数
1
解决办法
87
查看次数

标签 统计

hash ×1

python ×1

python-3.x ×1

set ×1

types ×1