【发布时间】:2017-12-10 09:23:11
【问题描述】:
我是 python 新手,正在学习不可变和可变对象(由于我在 MATLAB 和 C# 方面的编码经验有限,我以前从未遇到过这个问题)。
我想知道为什么,如果 python 中的字典是可变的,那么编辑第二个字典中包含的字典不会改变第二个字典吗?
这是一个示例,其中一个字典(蝙蝠侠)被添加到一个超级英雄名称(super_hero_names)的字典中。当蝙蝠侠后来被改变时,它并没有反映在超级英雄的名字字典中。如果 dicts 像字符串一样不可变,这对我来说是有意义的,但它们是可变的,那么为什么会发生这种情况?
super_hero_names = {
'Superman' : 'Clark Kent',
'Spiderman' : 'Peter Parker'
}
batman = {'Batman' : 'Bruce'}
super_hero_names.update(batman)
batman['Batman'] = 'Bruce Wayne' # (edited)
print(super_hero_names)
# Output: {'Superman': 'Clark Kent', 'Spiderman': 'Peter Parker', 'Batman': 'Bruce'}
【问题讨论】:
-
"为什么,如果 python 中的字典是可变的,编辑包含在第二个字典中的字典不会改变第二个字典?"因为
batman不包含在super_hero_names中。 -
那么是因为使用 dict.update() 不引用 batman 对象,不像更改先前放入(引用)第二个列表的列表也会更改第二个列表?
-
.update()将新的 值 插入到字典中。它不插入 references. -
此外,该示例有些损坏,因为您将新字典分配给
batman变量,而不是更改旧字典,但这并没有真正改变结果。 -
这篇文章可能对您有所帮助:Facts and myths about Python names and values,由 SO 资深人士 Ned Batchelder 撰写。
标签: python python-3.x dictionary immutability mutable