根据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'}
我想念什么?
答案 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