2011-11-04 20 views
0

我有一個類定義與__hash__函數,該函數使用對象屬性創建一個唯一的鍵在python集合中進行比較。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方法,只調用哈希)兩個哈希是相同的,理論上這是不可能的。

set([1630, 1630])

任何指導,將不勝感激。

回答

4

如果一個類不定義__cmp__()__eq__()方法不應該限定__hash__()操作要麼

source

定義__eq__()

1

您還需要實施__eq__()以匹配您的__hash__()實施。