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中的并发编程实例
Jul 07 Python
python实现去除下载电影和电视剧文件名中的多余字符的方法
Sep 23 Python
python批量提取word内信息
Aug 09 Python
python+selenium实现京东自动登录及秒杀功能
Nov 18 Python
python多维数组切片方法
Apr 13 Python
python统计多维数组的行数和列数实例
Jun 23 Python
Python爬取个人微信朋友信息操作示例
Aug 03 Python
pandas中apply和transform方法的性能比较及区别介绍
Oct 30 Python
Python3利用print输出带颜色的彩色字体示例代码
Apr 08 Python
Python使用mongodb保存爬取豆瓣电影的数据过程解析
Aug 14 Python
python 装饰器功能与用法案例详解
Mar 06 Python
Python通过len函数返回对象长度
Oct 22 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
浅析Yii2集成富文本编辑器redactor实例教程
2016/04/25 PHP
JavaScript 以对象为索引的关联数组
2010/05/19 Javascript
基于jquery的自定义鼠标提示效果 jquery.toolTip
2010/11/14 Javascript
js前台分页显示后端JAVA数据响应
2013/03/18 Javascript
Js 导出table内容到Excel的简单实例
2013/11/19 Javascript
jQuery实现倒计时按钮功能代码分享
2014/09/03 Javascript
JavaScript获取伪元素(Pseudo-Element)属性的方法技巧
2015/03/13 Javascript
javascript中callee与caller的区别分析
2015/04/20 Javascript
javascript判断网页是关闭还是刷新
2015/09/12 Javascript
详解AngularJS中module模块的导入导出
2015/12/10 Javascript
javascript简单比较日期大小的方法
2016/01/05 Javascript
jQuery实现订单提交页发送短信功能前端处理方法
2016/07/04 Javascript
JavaScript 最佳实践:帮你提升代码质量
2016/12/03 Javascript
用jQuery实现可输入多选下拉组合框实例代码
2017/01/18 Javascript
Bootstrap模态框插件使用详解
2017/05/11 Javascript
Angular2 之 路由与导航详细介绍
2017/05/26 Javascript
详解webpack2+React 实例demo
2017/09/11 Javascript
JavaScript实现重力下落与弹性效果的方法分析
2017/12/20 Javascript
AngularJS自定义表单验证功能实例详解
2018/08/24 Javascript
js前端面试之同步与异步问题详解
2019/04/03 Javascript
js 获取扫码枪输入数据的方法
2020/06/10 Javascript
Python编程中实现迭代器的一些技巧小结
2016/06/21 Python
Python编程修改MP3文件名称的方法
2017/04/19 Python
python 将print输出的内容保存到txt文件中
2018/07/17 Python
Python中应该使用%还是format来格式化字符串
2018/09/25 Python
Django实现分页显示效果
2019/10/31 Python
python:解析requests返回的response(json格式)说明
2020/04/30 Python
Python基于codecs模块实现文件读写案例解析
2020/05/11 Python
Python3如何使用range函数替代xrange函数
2020/10/05 Python
python爬虫分布式获取数据的实例方法
2020/11/26 Python
英国音乐设备和乐器商店:Gear4music
2017/10/16 全球购物
激情洋溢的毕业生就业求职信
2014/03/15 职场文书
舞蹈教育学专业自荐信
2014/06/15 职场文书
党员自我评议个人对照检查材料
2014/09/16 职场文书
软件测试专业推荐信
2014/09/18 职场文书
redis实现共同好友的思路详解
2021/05/26 Redis