我定义的其中一个类用于在
我期望这个集合只有一个元素,但实际上它有两个。这是为什么呢?
set()
中过滤相等的对象。但它并没有按照我的期望工作,这显然说明我理解错了什么。class Foo(object):
def __hash__(self):
return 7
x = set()
x.add(Foo())
assert len(x) == 1
x.add(Foo())
assert len(x) == 1 # AssertionError
我期望这个集合只有一个元素,但实际上它有两个。这是为什么呢?
__eq__
方法,才能得到一个只包含唯一对象的集合?(当然是在我的上下文中唯一) - Niklas Rhash(x)
,其中x
是一个int
,返回x
,因此哈希值之间没有冲突),但是假设哈希表当前有N个桶 - 哈希表实现将执行类似于bucket = hash_value%N
的操作来选择一个桶,而X,X + N,X + 2N等的哈希值都会在同一个桶上发生冲突。您可能已经知道这一点,但当前的措辞确实表达了相反的意思,可能会让读者感到困惑... - Tony Delroy