时间:2021-05-23
Python基础教程之浅拷贝和深拷贝实例详解
网上关于Python的深拷贝和浅拷贝的文章很多,这里对三种拷贝进行比较并附实例,大家可以参考下
一般的复制
#encoding:utf-8#定义一个嵌套集合lista=[1,2,3,[4,5,6,[7,8,9]]]listb=lista#分别打印出 lista和listb的地址值print id(lista) #4511103096print id(listb) #4511103096#修改lista中的内容,listb中的内容也会跟着修改lista[0]=0print lista #[0, 2, 3, [4, 5, 6, [7, 8, 9]]]print listb #[0, 2, 3, [4, 5, 6, [7, 8, 9]]]通过以上实践会发现,复制操作就是将lista在内存中指向的地址,也让listb指向他,本身并没有在内存中创建地址。
浅拷贝
#encoding:utf-8#定义一个嵌套集合import copylista=[1,2,3,[4,5,6,[7,8,9]]]#使用copy模块中copy方法listb=copy.copy(lista)print id(lista) #4396231640print id(listb) #4396231712#发现lista和listb在内存中的地址有区别,#打印元素中的第一个元素的地址值print id(lista[0])#140666751466536print id(listb[0])#140666751466536#元素的地址值是一样的,是不是意思就是,改变lista中的第一个元素,# listb中的也要改变呢lista[0]=0print lista #[0, 2, 3, [4, 5, 6, [7, 8, 9]]]print listb #[1, 2, 3, [4, 5, 6, [7, 8, 9]]]#结果发现,竟然没有跟着lista一起改变,为什么呢,因为使用了浅拷贝呗#我们在打印下lista[0]和listb[0]的地址print id(lista[0]) #140666751466560print id(listb[0]) #140666751466536#会发现lista[0]重新指向内存中的其他地址#这时候可以通过以上的方法,修改lista[3],lista[3]也是一个listprint id(lista[3])#4499779240print id(listb[3])#4499779240#修改lista[3]中第一个元素呢lista[3][0]=0print lista #[0, 2, 3, [0, 5, 6, [7, 8, 9]]]print listb #[0, 2, 3, [0, 5, 6, [7, 8, 9]]]#发现修改lista[3][0]元素的值,listb[3][0]也会跟着改变根据以上实践说明,浅拷贝对对象中对象没有拷贝。
深拷贝
#encoding:utf-8 #定义一个嵌套集合 import copy lista=[1,2,3,[4,5,6,[7,8,9]]] #深拷贝功能是在浅拷贝上做的加强,所以具备浅拷贝的功能 listb=copy.deepcopy(lista) lista[3][0]=0 print lista #[1, 2, 3, [0, 5, 6, [7, 8, 9]]] print listb #[1, 2, 3, [4, 5, 6, [7, 8, 9]]] #深拷贝会解决修改lista[3][0]值不会影响listb中的值 #再来修改下第三层列表中元素是不是也完成拷贝 lista[3][3][0]=0 print lista #[1, 2, 3, [0, 5, 6, [0, 8, 9]]] print listb #[1, 2, 3, [4, 5, 6, [7, 8, 9]]] #没有受到任何影响感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
java深拷贝与浅拷贝机制详解概要:在Java中,拷贝分为深拷贝和浅拷贝两种。java在公共超类Object中实现了一种叫做clone的方法,这种方法clone
本文实例讲述了JS赋值、浅拷贝和深拷贝(数组和对象的深浅拷贝)。分享给大家供大家参考,具体如下:深拷贝和浅拷贝是只针对Object和Array这样的引用数据类型
python深拷贝和浅拷贝的区别是: 1、直接赋值,默认浅拷贝传递对象的引用而已,原始列表改变,被赋值的b也会做相同的改变。 2、copy浅拷贝,没有拷贝子
本文实例讲述了Python中字典的浅拷贝与深拷贝用法。分享给大家供大家参考,具体如下:最近发现的一个很值得记录的东西就是python字典的浅拷贝问题首先,明确一
C/C++浅拷贝和深拷贝的实例详解深拷贝是指拷贝对象的具体内容,而内存地址是自主分配的,拷贝结束之后,两个对象虽然存的值是相同的,但是内存地址不一样,两个对象也