如何复制字典并仅在Python中编辑副本?

Python绝不会隐式复制字典或任何对象。因此,当我们设置dict2 = dict1时,我们使它们引用相同的字典对象。因此,即使我们对字典进行了变异,对其的所有引用也会继续引用该对象的当前状态。

dict1 = {"key1": "abc", "key2": "efg"}

dict2 = dict1

print(dict1)
print(dict2)

dict2['key2'] = 'pqr'

print(dict1)
print(dict2)

输出结果

{'key1': 'abc', 'key2': 'efg'}
{'key1': 'abc', 'key2': 'efg'}
{'key1': 'abc', 'key2': 'pqr'}
{'key1': 'abc', 'key2': 'pqr'}

复制字典,请使用浅拷贝或深拷贝方法,如以下示例中所述。

使用浅拷贝

dict1 = {"key1": "abc", "key2": "efg"}

print(dict1)

dict3 = dict1.copy()
print(dict3)

dict3['key2'] = 'xyz'

print(dict1)
print(dict3)

输出结果

{'key1': 'abc', 'key2': 'efg'}
{'key1': 'abc', 'key2': 'efg'}
{'key1': 'abc', 'key2': 'efg'}
{'key1': 'abc', 'key2': 'xyz'}

使用深度复制

import copy

dict1 = {"key1": "abc", "key2": "efg"}

print(dict1)

dict4 = copy.deepcopy(dict1)
print(dict4)

dict4['key2'] = 'test1'

print(dict4)
print(dict1)

输出结果

{'key1': 'abc', 'key2': 'efg'}
{'key1': 'abc', 'key2': 'efg'}
{'key1': 'abc', 'key2': 'test1'}
{'key1': 'abc', 'key2': 'efg'}