Python列表复制有几种方式,有何不同?

Admin 2021-06-02 群英技术资讯 745 次浏览

        本文主要介绍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没有任何的影响。

    copy()复制实现赋值

a = [11, 22, 33]
b = copy.copy(a)
print(id(a), id(b))
b[0]=1
print(a,b)

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

    deepcopy()复制实现赋值

a = [11, 22, 33]
b = copy.deepcopy(a)
print(id(a), id(b))
b[0]=1
print(a,b)

        输出结果为如下所示,发现在该实例中,deepcopy()和copy()的方式没有任何区别。

        那么浅复制和深复制有什么区别呢?继续看下面的实例测试。

    copy()和deepcopy()的区别

        6.1  copy()

a = [11, 22, 33, [1,2]]
b = copy.copy(a)
print(id(a), id(b))
b[3][0]=11
print(a,b)

        运行结果:

        6.2 deepcopy()

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列表复制识比较基础的知识,希望大家阅读完这篇文章能有所收获。

文本转载自脚本之家

群英智防CDN,智能加速解决方案
标签: Python列表复制

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。

猜你喜欢

成为群英会员,开启智能安全云计算之旅

立即注册
专业资深工程师驻守
7X24小时快速响应
一站式无忧技术支持
免费备案服务
免费拨打  400-678-4567
免费拨打  400-678-4567 免费拨打 400-678-4567 或 0668-2555555
在线客服
微信公众号
返回顶部
返回顶部 返回顶部
在线客服
在线客服