字典的深拷贝与浅拷贝
时间: 2023-08-19 07:11:48 浏览: 94
深拷贝和浅拷贝是字典拷贝的两种方式。深拷贝会创建一个完全独立的字典对象,包括可变类型元素也会在内存中分配不同的空间,而浅拷贝只是创建了一个新的字典对象,但是可变类型元素仍然指向同一块内存空间。[1]
在Python中,可以使用copy模块的deepcopy方法来实现深拷贝。该方法会根据原有字典对象创建一个新的字典对象,并且使得两个字典对象中的可变类型元素对应不同的内存空间,从而使得两个字典对象完全独立。[2]
下面是一个深拷贝的示例:
```
import copy
stu1 = {'name': '李晓明', 'age': 19, 'score': {'python': 95, 'math': 92}}
stu2 = copy.deepcopy(stu1)
print("stu1和stu2的内存地址分别为:", id(stu1), id(stu2))
print("stu1['score']和stu2['score']的内存地址分别为:", id(stu1['score']), id(stu2['score']))
stu1['score']['python'] = 100
print('stu1的值为:', stu1)
print('stu2的值为:', stu2)
```
输出结果:
```
stu1和stu2的内存地址分别为: 140708032123520 140708032123840
stu1['score']和stu2['score']的内存地址分别为: 140708032123776 140708032123776
stu1的值为: {'name': '李晓明', 'age': 19, 'score': {'python': 100, 'math': 92}}
stu2的值为: {'name': '李晓明', 'age': 19, 'score': {'python': 95, 'math': 92}}
```
可以看到,深拷贝后的stu2和stu1完全独立,修改stu1的值不会影响stu2的值。[2]
而浅拷贝只是创建了一个新的字典对象,但是可变类型元素仍然指向同一块内存空间。[3]在Python中,可以使用字典的copy方法来实现浅拷贝。[3]
下面是一个浅拷贝的示例:
```
dict1 = {'user': 'runoob', 'num': [1, 2, 3]}
dict2 = dict1 # 浅拷贝: 引用对象
dict3 = dict1.copy() # 浅拷贝:深拷贝父对象(一级目录),子对象(二级目录)不拷贝,还是引用
# 修改 dict1 数据
dict1['user'] = 'root'
dict1['num'].remove(1)
print(dict1)
print(dict2)
print(dict3)
```
输出结果:
```
{'user': 'root', 'num': [2, 3]}
{'user': 'root', 'num': [2, 3]}
{'user': 'runoob', 'num': [2, 3]}
```
可以看到,浅拷贝后的dict2和dict1指向同一块内存空间,修改dict1的值会影响到dict2的值,而dict3是一个独立的字典对象。[3]
阅读全文