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

dbl*_*iss 2 python module immutability

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

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

问题产生于讨论什么类型的对象可以成为Python的关键dicts.的Python文档宣称"只有不可变元件可以作为字典键,因此只有元组而不是列表可以用作键".但是一个模块 - 作为可变对象的一个​​例子 - 可以用作密钥,如

x = {sys: 1}
Run Code Online (Sandbox Code Playgroud)

use*_*ica 5

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

事情必须是不可变的才能被用作dict键并不完全正确.相反,考虑进行==比较的关于它们的一切都必须是不可改变的.==对于模块按对象标识工作,所以做类似的事情

import sys
sys.foo = 3
Run Code Online (Sandbox Code Playgroud)

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

  • 对; 如果你可以修改`type(sys).__ eq__`,你可能会破坏`sys`引用的`module`实例的可行性.但是,您无法设置内置`module`类型的属性. (2认同)