旧字典copy()成新字典后,修改新字典为什么还是修改了旧字典的值
时间: 2024-01-04 08:19:03 浏览: 107
在Python中,使用`copy()`方法复制一个字典时,实际上是创建了一个新的字典对象,并将原始字典中的键值对复制到新的字典中。这个过程是浅拷贝,即只复制了字典的第一层内容,而不会复制嵌套在字典中的对象。
当你修改新字典时,如果修改的是新字典中的可变对象(如列表、字典等),那么这个修改也会反映到原始字典中,因为新字典和原始字典共享相同的可变对象。这是因为复制操作只复制了对象的引用,而不是创建新的对象。
如果你想要完全独立的新字典,不受原始字典的影响,可以使用深拷贝(deepcopy)来创建新字典。深拷贝会递归地复制所有嵌套的对象,确保新字典与原始字典完全独立。
下面是一个示例代码,演示了浅拷贝和深拷贝的区别:
```python
import copy
# 原始字典
old_dict = {'a': [1, 2, 3], 'b': {'x': 10, 'y': 20}}
# 浅拷贝
new_dict_shallow = old_dict.copy()
# 深拷贝
new_dict_deep = copy.deepcopy(old_dict)
# 修改浅拷贝的新字典
new_dict_shallow['a'].append(4)
new_dict_shallow['b']['z'] = 30
# 修改深拷贝的新字典
new_dict_deep['a'].append(5)
new_dict_deep['b']['w'] = 40
print(old_dict) # {'a': [1, 2, 3], 'b': {'x': 10, 'y': 20}}
print(new_dict_shallow) # {'a': [1, 2, 3, 4], 'b': {'x': 10, 'y': 20, 'z': 30}}
print(new_dict_deep) # {'a': [1, 2, 3, 5], 'b': {'x': 10, 'y': 20, 'w': 40}}
```
可以看到,修改浅拷贝的新字典会影响原始字典,而修改深拷贝的新字典不会影响原始字典。
阅读全文