我必须在dict中存储具有两个属性(ida和idb)的对象。这两个属性都是64位正整数,我只能为ida和idb的唯一排列(顺序重要的组合)存储一个对象。例如:
obj1 = SomeClass(ida=5223372036854775807, idb=2)
obj2 = SomeClass(ida=2, idb=5223372036854775807)
obj3 = SomeClass(ida=5223372036854775807, idb=2)
由于对象本身是可变的,所以我使用元组的散列(ida,idb,)'作为键。在下面的例子中,考虑一下:
^{pr2}$我在我的64位机器上测试了上面的示例,它工作正常。在
我有以下问题:
为什么不直接使用元组(ida,idb)作为键呢?在
^{pr2}$就像伊格纳西奥说的,你可以有散列碰撞。你为什么不直接用元组本身呢?元组是不可变的,看起来你的ida和idb是(不可变的)整数。在
只有2**<;word size>;可能的哈希值,因此您必须运行128位版本的Python来存储所有(2**64)**2个可能的哈希值。是的,仍然有可能发生碰撞。如果需要存储唯一的对象,请使用}。在
set
;只要以一种合理的方式定义__hash__()
和{相关问题 更多 >
编程相关推荐