为什么更新一个字典对象会影响到其他的字典?

6
我有一个嵌套字典,我们称之为字典d。这个字典的键是整数,每个键的值都是另一个字典。我正在尝试在Python 2.7上编写一段简单的代码来更新一个外部键的值,但似乎它正在更新所有外部键的值。
希望以下代码能让您更容易理解。这是我的输入。
>>> template = {'mean':0,'median':0}
>>> d[0] = template
>>> d[1] = template
>>> d[0]['mean'] = 1
>>> d

然后这里是输出结果:

{0: {'mean':1, 'median':0}, 1:{'mean':1,'median':0}}

你看,我只给d [0] ['mean']分配了'1',但是不知何故d [1] ['mean']也被更新了。如果增加d中的键数,它将只更改所有d键上的['mean']值。
这里有什么问题吗?这是一个错误吗?

2
d[0]d[1] 是同一个 dict 对象... 使用 d[0] = template.copy() 等... - Jon Clements
1个回答

8
>>> d[0] = template
>>> d[1] = template

这两个语句使得d[0]d[1]都指向同一个对象,即template。现在你可以使用三个名称访问该字典,即templated[0]d[1]。因此,执行以下操作:

d[0]['mean'] = 1

修改一个字典对象,可以使用上面提到的其他名称进行引用。

为了让它按你期望的工作,你可以创建template对象的副本,就像这样:

>>> d[0] = template.copy()
>>> d[1] = template.copy()

现在,d[0]d[1]分别指代两个不同的字典对象。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接