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使用百度翻译进行中翻英示例
Apr 14 Python
python进阶教程之文本文件的读取和写入
Aug 29 Python
简单介绍Python2.x版本中的cmp()方法的使用
May 20 Python
Python工程师面试题 与Python基础语法相关
Jan 14 Python
Python网络爬虫实例讲解
Apr 28 Python
Python md5与sha1加密算法用法分析
Jul 14 Python
对python cv2批量灰度图片并保存的实例讲解
Nov 09 Python
老生常谈python中的重载
Nov 11 Python
如何将tensorflow训练好的模型移植到Android (MNIST手写数字识别)
Apr 22 Python
新版Pycharm中Matplotlib不会弹出独立的显示窗口的问题
Jun 02 Python
Python Switch Case三种实现方法代码实例
Jun 18 Python
python urllib库的使用详解
Apr 13 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
使用zend studio for eclipse不能激活代码提示功能的解决办法
2009/10/11 PHP
php session_start()关于Cannot send session cache limiter - headers already sent错误解决方法
2009/11/27 PHP
基于php常用正则表达式的整理汇总
2013/06/08 PHP
解析php中如何调用用户自定义函数
2013/08/06 PHP
PHP获取POST数据的几种方法汇总
2015/03/03 PHP
如何解决PHP使用mysql_query查询超大结果集超内存问题
2016/03/14 PHP
JAVASCRIPT keycode总结
2009/02/04 Javascript
AngularJS 2.0新特性有哪些
2016/02/18 Javascript
Extjs4.0 ComboBox如何实现三级联动
2016/05/11 Javascript
JS 日期与时间戮相互转化的简单实例
2016/06/22 Javascript
关于微信小程序bug记录与解决方法
2018/08/15 Javascript
解决vue自定义全局消息框组件问题
2019/11/22 Javascript
在Vue项目中使用Typescript的实现
2019/12/19 Javascript
Vue将props值实时传递 并可修改的操作
2020/08/09 Javascript
Jquery Fade用法详解
2020/11/06 jQuery
[07:52]2014DOTA2 TI逗比武士游V社解说背后的故事
2014/07/10 DOTA
Python 学习笔记
2008/12/27 Python
python复制与引用用法分析
2015/04/08 Python
Python之ReportLab绘制条形码和二维码的实例
2018/01/15 Python
python 将对象设置为可迭代的两种实现方法
2019/01/21 Python
python输出电脑上所有的串口名的方法
2019/07/02 Python
Python数据分析pandas模块用法实例详解
2019/11/20 Python
在tensorflow下利用plt画论文中loss,acc等曲线图实例
2020/06/15 Python
python接口自动化之ConfigParser配置文件的使用详解
2020/08/03 Python
Python 使用xlwt模块将多行多列数据循环写入excel文档的操作
2020/11/10 Python
深入解析HTML5 Canvas控制图形矩阵变换的方法
2016/03/24 HTML / CSS
美国农场鲜花速递:The Bouqs
2018/07/13 全球购物
本科生个人求职自荐信
2013/09/26 职场文书
大学生励志演讲稿
2014/04/25 职场文书
优秀毕业生的求职信
2014/07/21 职场文书
银行党的群众路线教育实践活动对照检查材料
2014/09/25 职场文书
2015年节能减排工作总结
2015/05/14 职场文书
董事长年会致辞
2015/07/29 职场文书
2016年学习雷锋精神广播稿
2015/12/17 职场文书
详解CSS开发过程中的20个快速提升技巧
2021/05/21 HTML / CSS
Vue鼠标滚轮滚动切换路由效果的实现方法
2021/08/04 Vue.js