Python列表复制有几种方式,有何不同?
Admin 2021-06-02 群英技术资讯 1389 次浏览
本文主要介绍Python列表复制的内容,而Python中列表的复制有直接赋值、浅复制和深复制这几种。下面我们来分别了解一下几种情况的使用和区别是什么。
a = [11, 22, 33] b = a print(id(a), id(b)) b[0]=1 print(a,b)
输出结果为如下所示,发现内存地址没有发生变化,b只是a的引用,通过b更改列表的值时,a同时做修改。

a = [11, 22, 33] b = a[:] print(id(a), id(b)) b[0]=1 print(a,b)
输出结果为如下所示,发现内存地址发生了变化,通过b更改列表的值时,对a没有任何的影响。

a = [11, 22, 33] b = copy.copy(a) print(id(a), id(b)) b[0]=1 print(a,b)
输出结果为如下所示,发现内存地址发生了变化,通过b更改列表的值时,对a没有任何的影响。说明copy()复制的方式和切片的方式功能相同。

a = [11, 22, 33] b = copy.deepcopy(a) print(id(a), id(b)) b[0]=1 print(a,b)
输出结果为如下所示,发现在该实例中,deepcopy()和copy()的方式没有任何区别。

那么浅复制和深复制有什么区别呢?继续看下面的实例测试。
a = [11, 22, 33, [1,2]] b = copy.copy(a) print(id(a), id(b)) b[3][0]=11 print(a,b)
运行结果:

a = [11, 22, 33, [1,2]] b = copy.deepcopy(a) print(id(a), id(b)) b[3][0]=11 print(a,b)
运行结果:

通过上面的测试,发现当列表a中的元素包含子列表时:
copy()方法为浅复制,没有复制子对象,当原始数据改变,子对象会改变;而deepcopy()方法包含对象里面的子对象的复制,当原始对象改变,不会造成深复制里任何子元素的改变。
以上就是关于Python列表复制的几种情况的介绍,上文有具体的代码示例,有需要的朋友可以了解一下。Python列表复制识比较基础的知识,希望大家阅读完这篇文章能有所收获。
文本转载自脚本之家
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章主要介绍了Jupyter notebook 输出部分显示不全的解决方案,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
这篇文章给大家分享的是有关Pytorch中gather的用法的内容,很多新手对于gather的用法不是很了解,因此分享一些给大家做个参考,希望大家阅读完这篇能有收获,接下来一起跟随小编看看吧。
python命令行传参有哪些方法?很多新手对于python命令行传参的方法可能不是很了解,这篇文章就主要给大家分享python命令行传参的方法,对新手学习有一定的借鉴价值,感兴趣的朋友可以参考一下,下面我们一起来学习吧。
这篇文章主要介绍了Python网络编程之ZeroMQ知识总结,文中有非常详细的代码示例,对正在学习python的小伙伴们有非常好的帮助,需要的朋友可以参考下
这篇文章给大家分享的是python中递归调用栈溢出的问题该怎样解决的方法。小编觉得挺实用的,因此分享给大家做个参考,文中示例代码介绍的非常详细,感兴趣的朋友接下来一起跟随小编看看吧。
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008