是否有Python等效的Java的IdentityHashMap?

我正在构建一个数据结构,并希望构建一个映射X-> Y的字典,其中X是我正在行走的数据结构中的字段,Y是我正在构建的数据结构中的字段。 X是一种不可用的类型。

平凡:

idmap = {} idmap[id(x)] = y 

使用xid作为字典键

Java的IdentityHashMap的目的是模拟动态字段。 由于Python语言已经直接支持动态属性,因此您不需要映射,只需将Y分配给X的属性即可

 x.someSuchRelation = y; 

如果将不可用的对象包装在另一个对象中,则可以使用常规的Python dict 。 具体来说,这样的事情:

 class Wrapper(object): def __init__(self, o): self.o = o def __hash__(self): return id(self.o) def __eq__(self, o): return hash(self) == hash(o) 

然后就像some_dict[Wrapper(unhashable_object)]一样使用它。

这是一种比仅使用id(o)作为键更有用的方法,如果您之后还需要能够访问对象本身(显然是key.o )。 如果你不这样做(并且垃圾收集不是问题),那就使用它。