python中为什么字典key必须是不可变的?
字典的哈希表实现使用从键值计算的哈希值来查找键。如果键是可变对象,则其值可能会发生变化,因此其哈希值也会发生变化。但是,由于无论谁更改键对象都无法判断它是否被用作字典键值,因此无法在字典中修改条目。然后,当你尝试在字典中查找相同的对象时,将无法找到它,因为其哈希值不同。如果你尝试查找旧值,也不会找到它,因为在该哈希表中找到的对象的值会有所不同。
如果你想要一个用列表索引的字典,只需先将列表转换为元组;用函数 tuple(L)
创建一个元组,其条目与列表 L
相同。 元组是不可变的,因此可以用作字典键。
已经提出的一些不可接受的解决方案:
-
哈希按其地址(对象ID)列出。这不起作用,因为如果你构造一个具有相同值的新列表,它将无法找到;例如:
mydict = {[1, 2]: "12"} print(mydict[[1, 2]])