【发布时间】:2011-11-04 18:47:05
【问题描述】:
我有一个带有 __hash__ 函数的类定义,该函数使用对象属性创建唯一键以在 python 集中进行比较。
哈希方法如下所示:
def __hash__(self):
return int('%d%s'%(self.id,self.create_key))
在负责实现此类的模块中,运行了几个查询,可以想象构造此类的重复实例,并且在负责执行此操作的函数中创建的队列表示为一个集合,以确保欺骗可以省略:
in_set = set()
out_set = set()
for inid in inids:
ps = Perceptron.getwherelinked(inid,self.in_ents)
for p in ps:
in_set.add(p)
for poolid in poolids:
ps = Perceptron.getwherelinked(poolid,self.out_ents)
for p in ps:
out_set.add(p)
return in_set.union(out_set)
(不知道为什么这里的缩进被破坏了)
不知何故,尽管调用了union 方法,我仍然得到了两个重复的实例。当打印出来时(使用 Perceptron 类中的 str 方法,只调用 hash),这两个哈希值是相同的,这在理论上是不可能的。
set([1630, 1630])
任何指导将不胜感激。
【问题讨论】: