是否有Python等效的Java的IdentityHashMap?
我正在构建一个数据结构,并希望构建一个映射X-> Y的字典,其中X是我正在行走的数据结构中的字段,Y是我正在构建的数据结构中的字段。 X是一种不可用的类型。
平凡:
idmap = {} idmap[id(x)] = y
使用x
的id
作为字典键
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
)。 如果你不这样做(并且垃圾收集不是问题),那就使用它。