为什么更新一个字典对象会影响另一个?

cah*_*hoy 3 python dictionary nested python-2.7

我有一个嵌套的字典,我们称它为字典d。该词典的键是一个整数,每个键的值是另一个词典。我正在python 2.7上尝试一个简单的代码来更新一个外键的值,但是似乎它正在更新外键的ALL的值。

希望这些代码将使其更易于理解。这是我的意见。

>>> template = {'mean':0,'median':0}
>>> d[0] = template
>>> d[1] = template
>>> d[0]['mean'] = 1
>>> d
Run Code Online (Sandbox Code Playgroud)

然后是输出:

{0: {'mean':1, 'median':0}, 1:{'mean':1,'median':0}}
Run Code Online (Sandbox Code Playgroud)

您会看到,我只为d [0] ['mean']分配了'1',但是d [1] ['mean']也有所更新。如果我增加d中的键数,它将仅更改所有d键上的所有['mean']值。

我在这里做错什么吗?这是错误吗?

the*_*eye 5

>>> d[0] = template
>>> d[1] = template
Run Code Online (Sandbox Code Playgroud)

这两种说法都提出d[0]d[1]指向同一个对象,template。现在,您可以查阅字典有三个名字,templated[0]d[1]。这样做:

d[0]['mean'] = 1
Run Code Online (Sandbox Code Playgroud)

修改字典对象,可以使用上述其他名称来引用该字典对象。

为了按预期工作,您可以创建template对象的副本,如下所示

>>> d[0] = template.copy()
>>> d[1] = template.copy()
Run Code Online (Sandbox Code Playgroud)

现在,d[0]d[1]引用两个不同的字典对象。