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字符类型的一些方法小结
May 16 Python
详解常用查找数据结构及算法(Python实现)
Dec 09 Python
Python之os操作方法(详解)
Jun 15 Python
Python多线程爬虫实战_爬取糗事百科段子的实例
Dec 15 Python
Python回文字符串及回文数字判定功能示例
Mar 20 Python
对pandas replace函数的使用方法小结
May 18 Python
Python 硬币兑换问题
Jul 29 Python
Python 利用高德地图api实现经纬度与地址的批量转换
Aug 14 Python
python实现大量图片重命名
Mar 23 Python
提升python处理速度原理及方法实例
Dec 25 Python
Python实现在Windows平台修改文件属性
Mar 05 Python
浅谈keras中的batch_dot,dot方法和TensorFlow的matmul
Jun 18 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+AJAX实现无刷新注册(带用户名实时检测)
2006/12/02 PHP
php自动获取字符串编码函数mb_detect_encoding
2011/05/31 PHP
PHP之短标签开启设置
2013/06/17 PHP
非常实用的php弹出错误警告函数扩展性强
2014/01/17 PHP
实现在同一方法中获取当前方法中新赋值的session值解决方法
2014/06/26 PHP
php mysql PDO 查询操作的实例详解
2017/09/23 PHP
Laravel ORM 数据model操作教程
2019/10/21 PHP
音乐播放用的的几个函数
2006/09/07 Javascript
FileUpload 控件 禁止手动输入或粘贴的实现代码
2010/04/07 Javascript
JS控件ASP.NET的treeview控件全选或者取消(示例代码)
2013/12/16 Javascript
javascript动态创建链接的方法
2015/05/13 Javascript
实例代码详解javascript实现窗口抖动及qq窗口抖动
2016/01/04 Javascript
jQuery Mobile动态刷新页面样式的实现方法
2016/05/28 Javascript
jQuery使用正则表达式替换dom元素标签用法示例
2017/01/16 Javascript
基于vue的短信验证码倒计时demo
2017/09/13 Javascript
Angular中使用MathJax遇到的一些问题
2017/12/15 Javascript
jQuery zTree搜索-关键字查询 递归无限层功能实现代码
2018/01/25 jQuery
JS获取url参数,JS发送json格式的POST请求方法
2018/03/29 Javascript
vue router 配置路由的方法
2018/07/26 Javascript
vue完成项目后,打包成静态文件的方法
2018/09/03 Javascript
微信小程序实现写入读取缓存详解
2019/08/30 Javascript
ES6中let、const的区别及变量的解构赋值操作方法实例分析
2019/10/15 Javascript
在类Unix系统上开始Python3编程入门
2015/08/20 Python
基于python的字节编译详解
2017/09/20 Python
python学习入门细节知识点
2018/03/29 Python
python实现将一个数组逆序输出的方法
2018/06/25 Python
python实现点对点聊天程序
2018/07/28 Python
python爬虫 线程池创建并获取文件代码实例
2019/09/28 Python
基于PyTorch的permute和reshape/view的区别介绍
2020/06/18 Python
Python如何读取、写入JSON数据
2020/07/28 Python
芬兰汽车配件商店:Autonvaraosat24
2017/01/30 全球购物
土木工程建筑专业毕业生求职信
2013/10/21 职场文书
党委书记岗位职责
2013/11/24 职场文书
物业公司采购员岗位职责
2013/12/31 职场文书
新郎新娘婚礼答谢词
2014/01/11 职场文书
浅谈mysql返回Boolean类型的几种情况
2021/06/04 MySQL