字典copy()-有时浅浅吗?

时间:2019-03-26 23:48:35

标签: python-3.x deep-copy shallow-copy

根据the official docs,字典副本很浅,即它返回一个包含相同键值对的新字典:

dict1 = {1: "a", 2: "b", 3: "c"}

dict1_alias = dict1
dict1_shallow_copy = dict1.copy()

我的理解是,如果我们del的一个dict1元素,那么dict1_alias和dict1_shallow_copy都会受到影响;但是,深层复制不会。

del dict1[2]
print(dict1)
>>> {1: 'a', 3: 'c'}  
print(dict1_alias)
>>> {1: 'a', 3: 'c'} 

但是dict1_shallow_copy第二个元素仍然存在!

print(dict1_shallow_copy)
>>>  {1: 'a', 2: 'b', 3: 'c'}  

我想念什么?

1 个答案:

答案 0 :(得分:3)

浅表副本意味着元素本身是相同的,而不是字典本身。

>>> a = {'a':[1, 2, 3],  #create a list instance at a['a']
         'b':4,
         'c':'efd'}
>>> b = a.copy()         #shallow copy a
>>> b['a'].append(2)     #change b['a']
>>> b['a']
[1, 2, 3, 2]
>>> a['a']               #a['a'] changes too, it refers to the same list
[1, 2, 3, 2]             
>>> del b['b']           #here we do not change b['b'], we change b
>>> b
{'a': [1, 2, 3, 2], 'c': 'efd'}
>>> a                    #so a remains unchanged
{'a': [1, 2, 3, 2], 'b': 4, 'c': 'efd'}1