Python的浅复制和深复制

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

a=[[1,2,3],[4,5,6]]
b=list(a)
a is b
Out[20]: False

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

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]进行修改,结果就不一样了。

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。

import copy
a=[[1,2,3],[4,5,6]]
b=copy.deepcopy(a)

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

a[0][1]='x'
a
Out[31]: [[1, 'x', 3], [4, 5, 6]]
b
Out[32]: [[1, 2, 3], [4, 5, 6]]

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

本文分享自微信公众号 - 鸿的学习笔记(shujuxuexizhilu)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-04-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏程序员宝库

最快的 Python Web 框架入门

环境:python3.5+ python -m pip install sanic

11540
来自专栏程序员宝库

Python库大全(涵盖了Python应用的方方面面),建议收藏留用!

学Python,想必大家都是从爬虫开始的吧。毕竟网上类似的资源很丰富,开源项目也非常多。

20140
来自专栏计算机视觉

为tensorflow指定GPU

为tensorflow指定GPU,原因是,默认创建session时,会将所有显存占满,发现有人在用的时候,就会session不能创建而报错。 首先nvidia...

29430
来自专栏ATYUN订阅号

如何在Python和numpy中生成随机数

随机性的使用是机器学习算法配置和评估的重要部分。从神经网络中的权重的随机初始化,到将数据分成随机的训练和测试集,再到随机梯度下降中的训练数据集的随机混洗(ran...

44730
来自专栏ATYUN订阅号

使用OpenCV,Python和深度学习进行人脸识别

在这篇文章中,你将学会如何使用OpenCV、Python和深度学习在图像和视频流中执行人脸识别。我们今天将在这里使用的基于深度学习的面部嵌入,既高度准确又能够实...

4.2K50
来自专栏架构师之路

Java体系化学习路线图,带走不谢!

可以说,Java是现阶段中国互联网公司中,覆盖度最广的研发语言,掌握了Java技术体系,不管在成熟的大公司,快速发展的公司,还是创业阶段的公司,都能有立足之地。

16560
来自专栏ATYUN订阅号

TF新工具AutoGraph:将Python转换为TensorFlow图

我们在这里向你介绍一个名为“AutoGraph”的TensorFlow新功能。AutoGraph将Python代码(包括控制流print()和其他Python原...

15940
来自专栏云计算教程系列

给Buildbot加上SSL,使用Nginx做反向代理

Buildbot是一个基于Python的持续集成系统,用于自动化软件构建,测试和发布。Buildbot自带内置的Web服务器并使用8010端口,为了使用SSL保...

24650
来自专栏程序员宝库

数据 | 基于 Python 分析微信好友数据

最近微信迎来了一次重要的更新,允许用户对"发现"页面进行定制。不知道从什么时候开始,微信朋友圈变得越来越复杂,当越来越多的人选择"仅展示最近三天的朋友圈",大概...

29540
来自专栏IT大咖说

饿了么:Redis Cluster运维方案

内容来源:2017 年 8 月 12 日,饿了么高级Python工程师黄光星在“CRUG 2017北京活动”进行《Redis Cluster运维方案》演讲分享。...

40420

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励