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工程师面试题 与Python基础语法相关
Jan 14 Python
老生常谈Python基础之字符编码
Jun 14 Python
Python使用SQLite和Excel操作进行数据分析
Jan 20 Python
numpy添加新的维度:newaxis的方法
Aug 02 Python
Python代码打开本地.mp4格式文件的方法
Jan 03 Python
ipython和python区别详解
Jun 26 Python
详解如何减少python内存的消耗
Aug 09 Python
python中从for循环延申到推导式的具体使用
Nov 29 Python
基于TensorFlow常量、序列以及随机值生成实例
Jan 04 Python
Python使用configparser读取ini配置文件
May 25 Python
3分钟看懂Python后端必须知道的Django的信号机制
Jul 26 Python
python 5个顶级异步框架推荐
Sep 09 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读取文件内容到数组的方法
2015/03/16 PHP
PHP使用逆波兰式计算工资的方法
2015/07/29 PHP
yii 框架实现按天,月,年,自定义时间段统计数据的方法分析
2020/04/04 PHP
数组Array进行原型prototype扩展后带来的for in遍历问题
2010/02/07 Javascript
jquery获取焦点和失去焦点事件代码
2013/04/21 Javascript
javascript中比较字符串是否相等的方法
2013/07/23 Javascript
使用js声明数组,对象在jsp页面中(获得ajax得到json数据)
2013/11/05 Javascript
JS显示表格内指定行html代码的方法
2015/03/31 Javascript
如何解决谷歌浏览器下jquery无法获取图片的尺寸
2015/09/10 Javascript
javascript实现方法调用与方法触发小结
2016/03/26 Javascript
jQuery页面元素动态添加后绑定事件丢失方法,非 live
2016/06/16 Javascript
Jquery循环截取字符串的方法(多出的字符串处理成"...")
2016/11/28 Javascript
AngularJS执行流程详解
2017/02/17 Javascript
基于Vue实例对象的数据选项
2017/08/09 Javascript
关于react-router/react-router-dom v4 history不能访问问题的解决
2018/01/08 Javascript
vue2.0 子组件改变props值,并向父组件传值的方法
2018/03/01 Javascript
JS解析后台返回的JSON格式数据实例
2018/08/06 Javascript
Vue实现验证码功能
2019/12/03 Javascript
JS数组方法slice()用法实例分析
2020/01/18 Javascript
python文件的md5加密方法
2016/04/06 Python
在Python 中同一个类两个函数间变量的调用方法
2019/01/31 Python
零基础使用Python读写处理Excel表格的方法
2019/05/02 Python
python开发游戏的前期准备
2019/05/05 Python
Python3变量与基本数据类型用法实例分析
2020/02/14 Python
Python3 ID3决策树判断申请贷款是否成功的实现代码
2020/05/21 Python
详解Python中的Lock和Rlock
2021/01/26 Python
总结30个CSS3选择器
2017/04/13 HTML / CSS
html5 canvas-1.canvas介绍(hello canvas)
2013/01/07 HTML / CSS
美国独家设计师眼镜在线光学商店:Glasses Gallery
2017/12/28 全球购物
ZWILLING双立人法国网上商店:德国刀具锅具厨具品牌
2019/08/28 全球购物
Weblogic和WebSphere不同特点
2012/05/09 面试题
2014国庆节演讲稿:祖国在我心中(400字)
2014/09/25 职场文书
委托书的样本
2015/01/28 职场文书
技术负责人岗位职责
2015/02/10 职场文书
校长个人总结
2015/03/03 职场文书
投诉信格式范文
2015/07/02 职场文书