首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模块对象不可变,可用作字典键。

模块对象不可变,可用作字典键。
EN

Stack Overflow用户
提问于 2018-05-26 00:11:44
回答 1查看 107关注 0票数 0

我最近在Mark 2013的“学习Python 5”中读到,python模块对象是不可变的,因此它们可以用作字典键。

但是假设我有两个文件a.pyb.py,我没有问题将b模块导入a.py,然后通过向b模块对象添加属性来修改b模块。

代码语言:javascript
复制
#a.py file 

import b
b.additionalProperty = 'hello'

那么python模块对象如何是不可变的,它们如何作为字典键使用呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-26 00:23:08

对模块对象进行更改(例如在其全局命名空间中添加或修改值)不会更改其哈希值。因此,虽然它不是任何正常定义不变的,但它的“值”用于散列目的是它的标识,这是不可变的。

因此,您确实可以使用模块对象作为字典的键。您还可以使用自定义类的实例,如以下所示:

代码语言:javascript
复制
class Example:
    pass # no __hash__ or __eq__ defined

obj = Example()
d = {obj: "this works"}
print(d)

obj.foo = "the attributes of obj don't matter for the hash"
d[obj] = "so this overwrites the previous value in the dict"
print(d)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50538213

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档