理解什么样的对象可以是字典键
Understanding what sort of objects can be dictionary keys
我正在与一位 SO 用户进行讨论,我们试图确定 Python 模块是否保存在变量中——例如,sys
, 以下 import sys
-- 是可变的或不可变的。
有没有人有好的答案?
这个问题源于关于哪种对象可以作为 Python dicts
的键的讨论。 Python docs 声称 "only immutable elements can be used as dictionary keys, and hence only tuples and not lists can be used as keys." 但是模块——作为可变对象的一个例子——可以用作键,如
x = {sys: 1}
它是可变的。你可以这样做:
>>> import sys
>>> sys.blah = 100
>>> sys.blah
100
The Python docs claim that "only immutable elements can be used as
dictionary keys, and hence only tuples and not lists can be used as
keys." But a module -- as just one example of a mutable object -- can
be used as a key
事物必须是不可变的才能用作字典键,这并不完全正确。相反,考虑用于 ==
比较的关于它们的一切都必须是不可变的。 ==
for modules works by object identity,所以做一些像
import sys
sys.foo = 3
不会更改用于 ==
比较的任何信息。因此,它们可以用作字典键。
我正在与一位 SO 用户进行讨论,我们试图确定 Python 模块是否保存在变量中——例如,sys
, 以下 import sys
-- 是可变的或不可变的。
有没有人有好的答案?
这个问题源于关于哪种对象可以作为 Python dicts
的键的讨论。 Python docs 声称 "only immutable elements can be used as dictionary keys, and hence only tuples and not lists can be used as keys." 但是模块——作为可变对象的一个例子——可以用作键,如
x = {sys: 1}
它是可变的。你可以这样做:
>>> import sys
>>> sys.blah = 100
>>> sys.blah
100
The Python docs claim that "only immutable elements can be used as dictionary keys, and hence only tuples and not lists can be used as keys." But a module -- as just one example of a mutable object -- can be used as a key
事物必须是不可变的才能用作字典键,这并不完全正确。相反,考虑用于 ==
比较的关于它们的一切都必须是不可变的。 ==
for modules works by object identity,所以做一些像
import sys
sys.foo = 3
不会更改用于 ==
比较的任何信息。因此,它们可以用作字典键。