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 06 Python
python实现挑选出来100以内的质数
Mar 24 Python
利用Python的Flask框架来构建一个简单的数字商品支付解决方案
Mar 31 Python
12步教你理解Python装饰器
Feb 25 Python
Ubuntu下安装PyV8
Mar 13 Python
简述:我为什么选择Python而不是Matlab和R语言
Nov 14 Python
python爬虫获取百度首页内容教学
Dec 23 Python
Python 调用 zabbix api的方法示例
Jan 06 Python
使用GitHub和Python实现持续部署的方法
May 09 Python
python sitk.show()与imageJ结合使用常见的问题
Apr 20 Python
使用python实现微信小程序自动签到功能
Apr 27 Python
pycharm-professional-2020.1下载与激活的教程
Sep 21 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数组(array)输出的三种形式详解
2013/06/05 PHP
PHP删除数组中空值的方法介绍
2014/04/14 PHP
两千行代码的PHP学习笔记汇总
2014/10/05 PHP
php输出全球各个时区列表的方法
2015/03/31 PHP
优化WordPress的Google字体以加速国内服务器上的运行
2015/11/24 PHP
PHP编写RESTful接口的方法
2016/02/21 PHP
Yii2实现增删改查后留在当前页的方法详解
2017/01/13 PHP
jQuery Validation插件remote验证方式的Bug解决
2010/07/01 Javascript
js indexOf()定义和用法
2012/10/21 Javascript
Google的跟踪代码 动态加载js代码方法应用
2012/11/12 Javascript
原生javascript模仿win8等待提示圆圈进度条
2014/04/24 Javascript
原生js与jQuery实现简单的tab切换特效对比
2015/07/30 Javascript
AngularJS入门教程之AngularJS模型
2016/04/18 Javascript
JavaScript入门教程之引用类型
2016/05/04 Javascript
vue.js表格组件开发的实例详解
2016/10/12 Javascript
JavaScript通过filereader接口读取文件
2017/05/10 Javascript
基于js中的原型(全面讲解)
2017/09/19 Javascript
JS实现的计数排序与基数排序算法示例
2017/12/04 Javascript
解决vue.js 数据渲染成功仍报错的问题
2018/08/25 Javascript
javascript canvas时钟模拟器
2020/07/13 Javascript
浅谈Python中的可变对象和不可变对象
2017/07/07 Python
Python 创建空的list,以及append用法讲解
2018/05/04 Python
Python爬虫学习之获取指定网页源码
2019/07/30 Python
python闭包、深浅拷贝、垃圾回收、with语句知识点汇总
2020/03/11 Python
如何解决pycharm调试报错的问题
2020/08/06 Python
html5 CSS过度-webkit-transition使用介绍
2013/07/02 HTML / CSS
加拿大知名的国际儿童品牌:Hatley
2016/11/09 全球购物
高中毕业自我鉴定
2013/12/22 职场文书
中级会计职业生涯规划范文
2014/01/16 职场文书
大学生毕业自我鉴定范文
2014/02/03 职场文书
文化宣传方案
2014/03/13 职场文书
党的群众路线教育实践活动领导班子整改方案
2014/10/25 职场文书
2015年语文教师工作总结
2015/05/25 职场文书
2015年依法治校工作总结
2015/07/27 职场文书
创业项目(超低成本创业项目)
2019/08/16 职场文书
爱心捐款倡议书:点燃希望,传递温暖
2019/11/04 职场文书