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 相关文章推荐
合并百度影音的离线数据( with python 2.3)
Aug 04 Python
玩转python爬虫之URLError异常处理
Feb 17 Python
深入理解python try异常处理机制
Jun 01 Python
利用Python实现命令行版的火车票查看器
Aug 05 Python
Python实现SSH远程登陆,并执行命令的方法(分享)
May 08 Python
Python 中 Virtualenv 和 pip 的简单用法详解
Aug 18 Python
python django使用haystack:全文检索的框架(实例讲解)
Sep 27 Python
Python设计模式之外观模式实例详解
Jan 17 Python
Python函数中的可变长参数详解
Sep 12 Python
适合Python初学者的一些编程技巧
Feb 12 Python
Django使用Profile扩展User模块方式
May 14 Python
浅谈python处理json和redis hash的坑
Jul 16 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
也谈截取首页新闻 - 范例
2006/10/09 PHP
PHP以及MYSQL日期比较方法
2012/11/29 PHP
实现在同一方法中获取当前方法中新赋值的session值解决方法
2014/06/26 PHP
搭建Vim为自定义的PHP开发工具的一些技巧
2015/12/11 PHP
Zend Framework教程之分发器Zend_Controller_Dispatcher用法详解
2016/03/07 PHP
php实现XML和数组的相互转化功能示例
2017/02/08 PHP
JavaScript中创建对象和继承示例解读
2014/02/12 Javascript
js获取域名的方法
2015/01/27 Javascript
Bootstrap 折叠(Collapse)插件用法实例详解
2016/06/01 Javascript
jQuery使用getJSON方法获取json数据完整示例
2016/09/13 Javascript
详解JS对象封装的常用方式
2016/12/30 Javascript
jQuery实现字符串全部替换的方法【推荐】
2017/03/09 Javascript
jquery Form轻松实现文件上传
2017/05/24 jQuery
Angular 2.x学习教程之结构指令详解
2017/05/25 Javascript
CentOS 安装NodeJS V8.0.0的方法
2017/06/15 NodeJs
vue引入js数字小键盘的实现代码
2018/05/14 Javascript
详解webpack打包第三方类库的正确姿势
2018/10/20 Javascript
详解VSCode配置启动Vue项目
2019/05/14 Javascript
浅谈JS中this在各个场景下的指向
2019/08/14 Javascript
[01:28:24]NAVI vs VG Supermajor 败者组 BO3 第三场 6.5
2018/06/06 DOTA
Python BeautifulSoup中文乱码问题的2种解决方法
2014/04/22 Python
python使用urllib2提交http post请求的方法
2015/05/26 Python
Windows下安装Django框架的方法简明教程
2018/03/28 Python
python 实现批量xls文件转csv文件的方法
2018/10/23 Python
django中上传图片分页三级联动效果的实现代码
2019/08/30 Python
Matplotlib中%matplotlib inline如何使用
2020/07/28 Python
意大利制造的男鞋和女鞋:SCAROSSO
2018/03/07 全球购物
建筑工程技术应届生自荐信
2013/09/27 职场文书
建筑实习自我鉴定
2013/10/18 职场文书
计算机专业毕业生推荐信
2013/11/25 职场文书
乔迁宴答谢词
2014/01/21 职场文书
会计助理岗位职责
2014/02/17 职场文书
巾帼文明岗申报材料
2014/05/01 职场文书
模范教师材料大全
2014/12/16 职场文书
Java SSH 秘钥连接mysql数据库的方法
2021/06/28 Java/Android
MySQL创建管理RANGE分区
2022/04/13 MySQL