前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python的浅复制和深复制

Python的浅复制和深复制

作者头像
哒呵呵
发布2018-08-06 14:12:13
6770
发布2018-08-06 14:12:13
举报
文章被收录于专栏:鸿的学习笔记鸿的学习笔记

在前文已经看到过了可以使用list函数去复制一个列表,这个就是浅复制,浅复制会构建一个新的对象,并且维护之前对象(子对象)的引用,而深复制则是将之前的子对象通过递归的方式也拷贝出来。从例子中学习吧。 先看看浅复制:

代码语言:javascript
复制
a=[[1,2,3],[4,5,6]]
b=list(a)
a is b
Out[20]: False

如果给a再增加一个子列表:

代码语言:javascript
复制
a.append([7,8,9])
a
Out[22]: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
b
Out[23]: [[1, 2, 3], [4, 5, 6]]

这时候b是不受影响的,但是如果给a的子对象,也就是内部的列表[1,2,3],[4,5,6]进行修改,结果就不一样了。

代码语言:javascript
复制
a[0][1]='x'
a
Out[25]: [[1, 'x', 3], [4, 5, 6], [7, 8, 9]]
b
Out[26]: [[1, 'x', 3], [4, 5, 6]]

我们修改了a,但是b也受到了影响,因为在浅复制里并不会复制a中的子对象,而只是复制了子对象的引用给了b。但是给a增加子对象并不会影响b。为了避免这样的副作用,就有了深复制。深复制在python的内置模块copy。

代码语言:javascript
复制
import copy
a=[[1,2,3],[4,5,6]]
b=copy.deepcopy(a)

这个时候我们修改a,就不会影响b了。

代码语言:javascript
复制
a[0][1]='x'
a
Out[31]: [[1, 'x', 3], [4, 5, 6]]
b
Out[32]: [[1, 2, 3], [4, 5, 6]]

当然这个不仅仅用于copy内置的容器,也用能于copy对象。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-04-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 鸿的学习笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档