Python中使用copy模块实现列表(list)拷贝


Posted in Python onApril 14, 2015

引用是指保存的值为对象的地址。在 Python 语言中,一个变量保存的值除了基本类型保存的是值外,其它都是引用,因此对于它们的使用就需要小心一些。下面举个例子:

问题描述:已知一个列表,求生成一个新的列表,列表元素是原列表的复制

a=[1,2]

b=a

这种做法其实并未真正生成一个新的列表,b指向的仍然是a所指向的对象。这样,如果对a或b的元素进行修改,a,b的值同时发生变化。

解决的方法为:

a=[1,2]

b=a[:]

这样修改a对b没有影响。修改b对a没有影响。

但 这种方法只适用于简单列表,也就是列表中的元素都是基本类型,如果列表元素还存在列表的话,这种方法就不适用了。原因就是,象a[:]这种处理,只是将列 表元素的值生成一个新的列表,如果列表元素也是一个列表,如:a=[1,[2]],那么这种复制对于元素[2]的处理只是复制[2]的引用,而并未生成 [2]的一个新的列表复制。为了证明这一点,测试步骤如下:

>>> a=[1,[2]]

>>> b=a[:]

>>> b

[1, [2]]

>>> a[1].append(3)

>>> a

[1, [2, 3]]

>>> b

[1, [2, 3]]

可见,对a的修改影响到了b。如果解决这一问题,可以使用copy模块中的deepcopy函数。修改测试如下:
>>> import copy

>>> a=[1,[2]]

>>> b=copy.deepcopy(a)

>>> b

[1, [2]]

>>> a[1].append(3)

>>> a

[1, [2, 3]]

>>> b

[1, [2]]

有时候知道这一点是非常重要的,因为可能你的确需要一个新的列表,并且对这个新的列表进行操作,同时不想影响原来的列表。
Python 相关文章推荐
详解Python 模拟实现生产者消费者模式的实例
Aug 10 Python
python xlsxwriter库生成图表的应用示例
Mar 16 Python
Python数据处理numpy.median的实例讲解
Apr 02 Python
python连接mongodb密码认证实例
Oct 16 Python
深入解析python中的实例方法、类方法和静态方法
Mar 11 Python
使用Python和Prometheus跟踪天气的使用方法
May 06 Python
django 类视图的使用方法详解
Jul 24 Python
Pytorch中的VGG实现修改最后一层FC
Jan 15 Python
Django单元测试中Fixtures的使用方法
Feb 26 Python
keras load model时出现Missing Layer错误的解决方式
Jun 11 Python
Python 抓取数据存储到Redis中的操作
Jul 16 Python
10行Python代码实现Web自动化管控的示例代码
Aug 14 Python
复习Python中的字符串知识点
Apr 14 #Python
Python内置函数dir详解
Apr 14 #Python
Python最基本的数据类型以及对元组的介绍
Apr 14 #Python
Python isinstance函数介绍
Apr 14 #Python
Python with用法实例
Apr 14 #Python
详细探究Python中的字典容器
Apr 14 #Python
Python中decorator使用实例
Apr 14 #Python
You might like
逆序二维数组插入一元素的php代码
2012/06/08 PHP
基于PHP读取TXT文件向数据库导入海量数据的方法
2013/04/23 PHP
学习php设计模式 php实现命令模式(command)
2015/12/08 PHP
yii2利用自带UploadedFile实现上传图片的示例
2017/02/16 PHP
jquery UI 1.72 之datepicker
2009/12/29 Javascript
jquery 防止表单重复提交代码
2010/01/21 Javascript
javascript中对Attr(dom中属性)的操作示例讲解
2013/12/02 Javascript
js控制文本框输入的字符类型方法汇总
2015/06/19 Javascript
JavaScript代码实现禁止右键、禁选择、禁粘贴、禁shift、禁ctrl、禁alt
2015/11/17 Javascript
ionic开发中点击input时键盘自动弹出
2016/12/23 Javascript
用js制作淘宝放大镜效果
2020/10/28 Javascript
关于Node.js的events.EventEmitter用法介绍
2017/04/01 Javascript
利用node.js本地搭建HTTP服务器
2017/04/19 Javascript
vue axios 二次封装的示例代码
2017/12/08 Javascript
基于node.js实现微信支付退款功能
2017/12/19 Javascript
在vue-cli搭建的项目中增加后台mock接口的方法
2018/04/26 Javascript
详解Angular cli配置过程记录
2019/11/07 Javascript
vue中监听路由参数的变化及方法
2019/12/06 Javascript
基于Vue CSR的微前端实现方案实践
2020/05/27 Javascript
vue-以文件流-blob-的形式-下载-导出文件操作
2020/08/07 Javascript
[01:21:07]EG vs Liquid 2018国际邀请赛淘汰赛BO3 第一场 8.25
2018/08/29 DOTA
python中的随机函数小结
2018/01/27 Python
利用Python对文件夹下图片数据进行批量改名的代码实例
2019/02/21 Python
opencv中图像叠加/图像融合/按位操作的实现
2020/04/01 Python
python Yaml、Json、Dict之间的转化
2020/10/19 Python
html5 更新图片颜色示例代码
2014/07/29 HTML / CSS
如何打印出当前源文件的文件名以及源文件的当前行号
2015/04/05 面试题
了解AppleTalk协议吗
2014/04/01 面试题
运动会广播稿50字
2014/01/26 职场文书
上课迟到检讨书
2014/02/19 职场文书
就业协议书盖章的注意事项
2014/09/28 职场文书
二手车转让协议书
2015/01/29 职场文书
七一建党节慰问信
2015/02/14 职场文书
幼儿园迎新生欢迎词
2015/09/30 职场文书
党风廉政建设心得体会
2019/05/21 职场文书
Python学习之迭代器详解
2022/04/01 Python