为什么更新一个字典对象会影响其他对象?
Why does updating one dictionary object affect other?
我有一个嵌套字典,我们称它为字典 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'] 值。
我是不是做错了什么?这是一个错误吗?
>>> d[0] = template
>>> d[1] = template
这两个语句使 d[0]
和 d[1]
都指向同一个对象,template
。现在您可以访问具有三个名称的字典,template
、d[0]
和 d[1]
。这样做:
d[0]['mean'] = 1
修改一个字典对象,可以用上面提到的其他名称引用。
要使其按预期工作,您可以创建 template
对象的副本,如下所示
>>> d[0] = template.copy()
>>> d[1] = template.copy()
现在,d[0]
和 d[1]
指的是两个不同的字典对象。
我有一个嵌套字典,我们称它为字典 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'] 值。
我是不是做错了什么?这是一个错误吗?
>>> d[0] = template
>>> d[1] = template
这两个语句使 d[0]
和 d[1]
都指向同一个对象,template
。现在您可以访问具有三个名称的字典,template
、d[0]
和 d[1]
。这样做:
d[0]['mean'] = 1
修改一个字典对象,可以用上面提到的其他名称引用。
要使其按预期工作,您可以创建 template
对象的副本,如下所示
>>> d[0] = template.copy()
>>> d[1] = template.copy()
现在,d[0]
和 d[1]
指的是两个不同的字典对象。