了解哪种对象可以是字典键

时间:2015-04-07 17:39:36

标签: python module immutability

我正在与SO用户进行讨论,我们正在尝试确定Python模块是否在变量中保存 - 例如sysimport sys - 是可变的或不可变的。

有没有人有一个好的答案?

问题来自于讨论什么类型的对象可以成为Python dicts的键。 Python docs声称"只有不可变元素可以用作字典键,因此只有元组而不是列表可以用作键。"但是模块 - 作为可变对象的一个​​示例 - 可以用作键,如

x = {sys: 1}

2 个答案:

答案 0 :(得分:5)

  

Python文档声称“只有不可变元素可以用作   字典键,因此只能使用元组而不是列表   密钥。“但是一个模块 - 只是可变对象的一个​​例子 - 可以   用作关键

事情必须是不可变的才能被用作dict键。相反,考虑进行==比较的所有关于它们的内容必须是不可变的。模块的==按对象标识工作,所以做类似

的操作
import sys
sys.foo = 3

不会更改用于==比较的任何信息。因此,它们可以用作字典键。

答案 1 :(得分:3)

这是可变的。你可以这样做:

>>> import sys
>>> sys.blah = 100
>>> sys.blah
100