使用字典中的copy方法可以实现一个字典的浅拷贝。copy
方法的语法格式为:d.copy()
其作用是返回一个对字典d进行浅拷贝而得到的新字典。
浅拷贝实例
stu1={'姓名':'小明','年龄':19,'score':{'python':95}}
stu2=stu1 #直接赋值,此时stu2和stu1指向同一个字典对象
stu3=stu1.copy() #使用copy方法进行浅拷贝
print('stu1、stu2和stu3的内存地址分别为:',id(stu1),id(stu2),id(stu3))
stu1['name']='马红' #将stu1中键为name的元素的值修改为#'马红'
print('stu1的值为:',stu1)
print('stu2的值为:',stu2)
print('stu3的值为:',stu3)
print("stu1['score']和stu3['score']的内存地址分别为:",id(stu1['score']), id(stu3['score']))
stu1['score']['python']=100
print('stu1的值为:',stu1)
print('stu3的值为:',stu3)
结果:
可以发现stu1[‘score’][‘python’]=100
更改了stu3对应的值
**
深拷贝
使用copy模块的deepcopy方法可以实现深拷贝,deepcopy方法的
语法格式为: copy.deepcopy(d)
深拷贝不仅使得原有字典对象和生成的字典对象对应不同的内存空间,而且使得两个字典对象中的可变类型元素对应不同的内存空间,从而使得两个字典对象完全独立。其作用是根据字典d进行深拷贝创建一个新的字典对象并返回。
深拷贝实例
import copy #导入copy模块
stu1={'name':'李晓明','age':19,'score':{'python':95,'math':92}}
stu2=copy.deepcopy(stu1) #使用deepcopy方法进行深拷贝
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)
结果
总结:
经过两种拷贝的对比,可以发现,深拷贝不仅使得原有字典对象和生成的字典对象对应不同的内存空间,而且使得两个字典对象中的可变类型元素对应不同的内存空间,从而使得两个字典对象完全独立。其作用是根据字典d进行深拷贝创建一个新的字典对象并返回。
而浅拷贝只不能使得两个字典对象中的可变类型元素对应不同的内存空间。