时间:2021-05-22
这篇文章主要介绍了python深copy和浅copy区别对比解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
首先先看一段代码
import copy a = [1, 2, 3, [4]]b = ac = 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] 地址为 4555940360b值为 [1, 2, 3, [4, 5], 4] 地址为 4555940360c值为 [1, 2, 3, [4, 5]] 地址为 4555873544d值为 [1, 2, 3, [4]] 地址为 4556227912e值为 [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] 地址为 4334486344e子对象值为 [4, 5] 地址为 4334486344由上可得出,python中的copy分为三种:
1、直接复制:也就是对象引用
2、浅拷贝:拷贝父对象,不会拷贝对象的内部的子对象。
3、深拷贝:完全拷贝了父对象及其子对象
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
直接赋值和copy的区别:直接赋值:其实就是对象的引用(别名)。浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象。深拷贝(deepcopy):copy
python深拷贝和浅拷贝的区别是: 1、直接赋值,默认浅拷贝传递对象的引用而已,原始列表改变,被赋值的b也会做相同的改变。 2、copy浅拷贝,没有拷贝子
1.copy.copy浅拷贝只拷贝父对象,不会拷贝对象的内部的子对象。2.copy.deepcopy深拷贝拷贝对象及其子对象一个很好的例子:importcopy
直接赋值:其实就是对象的引用(别名)。浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象。深拷贝(deepcopy):copy模块的deepcopy方法
定义直接赋值:就是对象的引用(别名)浅拷贝(copy):拷贝父对象,不拷贝对象内部的子对象深拷贝(deepcopy):copy模块的deepcopy方法,完全拷