为什么dict2中嵌套字典的更改会影响dict1?

Mar*_*arc 8 python dictionary nested mutability

我不明白这些情况:

content = {'a': {'v': 1}, 'b': {'v': 2}}
d1 = {'k1': {}}
d2 = {'k2': {}}
d1['k1'].update(content)
print(d1)
content['a']['v'] = 3
content['b']['v'] = 4
d2['k2'].update(content)
print(d2)
print(d1)
>>> {'k1': {'a': {'v': 1}, 'b': {'v': 2}}}
>>> {'k2': {'a': {'v': 3}, 'b': {'v': 4}}}
>>> {'k1': {'a': {'v': 3}, 'b': {'v': 4}}}
Run Code Online (Sandbox Code Playgroud)

在上述情况下,在更新可变内容之后改变d1的内容.

content = {'a': 1, 'b': 2}
d1 = {'k1': {}}
d2 = {'k2': {}}
d1['k1'].update(content)
print(d1)
content['a'] = 3
content['b'] = 4
d2['k2'].update(content)
print(d2)
print(d1)
>>> {'k1': {'a': 1, 'b': 2}}
>>> {'k2': {'a': 3, 'b': 4}}
>>> {'k1': {'a': 1, 'b': 2}} 
Run Code Online (Sandbox Code Playgroud)

但是,在这种情况下,即使变量内容发生变化,d1也不会改变.我不明白为什么......任何想法?

per*_*eal 7

浅浅与深拷贝.

这里的副本是浅拷贝,因此第一级条目是副本,但嵌套结构是引用.

  • 浅拷贝构造新化合物对象,然后(在可能的范围)插入到其在原始找到的对象的引用.
  • 深层副本构造新化合物的对象,然后,递归地,插入拷贝到它在找到的对象的
    原稿.