python深copy和浅copy区别对比解析
这篇文章主要介绍了python深copy和浅copy区别对比解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
首先先看一段代码
importcopy a=[1,2,3,[4]] b=a c=a.copy() d=copy.deepcopy(a) e=copy.copy(a) a.append(4) a[3].append(5) print('a值为{}地址为{}'.format(a,id(a))) print('b值为{}地址为{}'.format(b,id(b))) print('c值为{}地址为{}'.format(c,id(c))) print('d值为{}地址为{}'.format(d,id(d))) print('e值为{}地址为{}'.format(e,id(e)))
执行结果:
a值为[1,2,3,[4,5],4]地址为4555940360 b值为[1,2,3,[4,5],4]地址为4555940360 c值为[1,2,3,[4,5]]地址为4555873544 d值为[1,2,3,[4]]地址为4556227912 e值为[1,2,3,[4,5]]地址为4556227464
从结果中可以看出来:
b赋值的为a的内存地址,值会随着a的变化而变化---直接赋值,对象引用
c=a.copy()使用的为python自带的copy方法,从结果中可看出复制后c的地址与a的地址不一致,也就是c将a的值完全复制包括地址,其结果就是c的值不会随着a的值变化而变化---深copy,完全拷贝了父对象及其子对象
d和e使用的是python自带的copy模块中的copy方法和deepcopy方法:
其中d的值地址和a不一致,值也不会随着a的变化而变化---深copy,完全拷贝了父对象及其子对象
其中e中父级内容不随着a的变化而变化,但e中子list中内容会随着a的变化而变化---浅copy,拷贝父对象,不会拷贝对象的内部的子对象
print('a子对象值为{}地址为{}'.format(a[3],id(a[3]))) print('e子对象值为{}地址为{}'.format(a[3],id(a[3]))) 结果: a子对象值为[4,5]地址为4334486344 e子对象值为[4,5]地址为4334486344
由上可得出,python中的copy分为三种:
1、直接复制:也就是对象引用
2、浅拷贝:拷贝父对象,不会拷贝对象的内部的子对象。
3、深拷贝:完全拷贝了父对象及其子对象
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。