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 解析XML文件
Apr 15 Python
python下载文件时显示下载进度的方法
Apr 02 Python
使用Python发送邮件附件以定时备份MySQL的教程
Apr 25 Python
谈谈如何手动释放Python的内存
Dec 17 Python
python中如何使用朴素贝叶斯算法
Apr 06 Python
基于Python和Scikit-Learn的机器学习探索
Oct 16 Python
Python用for循环实现九九乘法表
May 31 Python
Python数据可视化 pyecharts实现各种统计图表过程详解
Aug 15 Python
Python Django 页面上展示固定的页码数实现代码
Aug 21 Python
python中sort和sorted排序的实例方法
Aug 26 Python
python opencv 图像边框(填充)添加及图像混合的实现方法(末尾实现类似幻灯片渐变的效果)
Mar 09 Python
Python稀疏矩阵及参数保存代码实现
Apr 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
模拟OICQ的实现思路和核心程序(三)
2006/10/09 PHP
基于PHP实现的事件机制实例分析
2015/06/18 PHP
PHP编程入门的基本语法知识点总结
2016/01/26 PHP
PHP实现生成带背景的图形验证码功能
2016/10/03 PHP
基于jquery的一行代码轻松实现拖动效果
2010/12/28 Javascript
javascript 基础篇1 什么是js 建立第一个js程序
2012/03/14 Javascript
原生js实现改变随意改变div属性style的名称和值的结果
2013/09/26 Javascript
JS对象转换为Jquery对象示例
2014/01/26 Javascript
jquery实现类似淘宝星星评分功能实例
2014/09/12 Javascript
JavaScript中pop()方法的使用教程
2015/06/09 Javascript
Javascript的表单验证长度
2016/03/16 Javascript
深入浅析JavaScript中数据共享和数据传递
2016/04/25 Javascript
jQuery中的each()详细介绍(推荐)
2016/05/25 Javascript
浅谈js中几种实用的跨域方法原理详解
2016/12/02 Javascript
关于javascript事件响应的基础语法总结(必看篇)
2016/12/26 Javascript
详解react服务端渲染(同构)的方法
2017/09/21 Javascript
vue-rx的初步使用教程
2018/09/21 Javascript
修改vue源码实现动态路由缓存的方法
2020/01/21 Javascript
python将MongoDB里的ObjectId转换为时间戳的方法
2015/03/13 Python
Python两个整数相除得到浮点数值的方法
2015/03/18 Python
理解python正则表达式
2016/01/15 Python
python 添加用户设置密码并发邮件给root用户
2016/07/25 Python
Python标准库inspect的具体使用方法
2017/12/06 Python
Tensorflow使用支持向量机拟合线性回归
2018/09/07 Python
python类的实例化问题解决
2019/08/31 Python
Python操作dict时避免出现KeyError的几种解决方法
2020/09/20 Python
python爬虫实现爬取同一个网站的多页数据的实例讲解
2021/01/18 Python
浅析CSS3中鲜为人知的属性:-webkit-tap-highlight-color
2017/01/12 HTML / CSS
HTML5新增加标签和功能概述
2016/09/05 HTML / CSS
Html5 Canvas动画基础碰撞检测的实现
2018/12/06 HTML / CSS
解锁canvas导出图片跨域的N种姿势小结
2019/01/24 HTML / CSS
Pamela Love官网:纽约设计师Pamela Love的精美、时尚和穿孔珠宝
2020/10/19 全球购物
农业资源与环境专业自荐信范文
2013/12/30 职场文书
出国导师推荐信
2015/03/25 职场文书
pytorch finetuning 自己的图片进行训练操作
2021/06/05 Python
手残删除python之后的补救方法
2021/06/26 Python