关于什么可以/不能用作python dict的键,我有点困惑.
dicked = {}
dicked[None] = 'foo' # None ok
dicked[(1,3)] = 'baz' # tuple ok
import sys
dicked[sys] = 'bar' # wow, even a module is ok !
dicked[(1,[3])] = 'qux' # oops, not allowed
Run Code Online (Sandbox Code Playgroud)
所以一个元组是一个不可变的类型,但是如果我在其中隐藏一个列表,那么它就不能成为一个键......难道我不能轻易地隐藏模块中的列表吗?
我有一个模糊的想法,关键是必须"可以",但我只是承认自己对技术细节的无知; 我不知道这里到底发生了什么.如果您尝试使用列表作为键,将哈希作为其内存位置,会出现什么问题?
它显然有效,但有两种相同的元素碰巧在Dict中添加两个条目的情况?我想我之前得到了这个条件并将我的代码更改frozenset(...)
为tuple(sorted(frozenset(...)))
.知道Dict和冻结集实现如何确认是否需要的人可以吗?