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 29 Python
总结python中pass的作用
Feb 27 Python
Python内置random模块生成随机数的方法
May 31 Python
Python替换月份为英文缩写的实现方法
Jul 15 Python
Django中create和save方法的不同
Aug 13 Python
python通过txt文件批量安装依赖包的实现步骤
Aug 13 Python
python实现差分隐私Laplace机制详解
Nov 25 Python
TensorBoard 计算图的查看方式
Feb 15 Python
python实现滑雪游戏
Feb 22 Python
django执行数据库查询之后实现返回的结果集转json
Mar 31 Python
python 模块导入问题汇总
Feb 01 Python
python语言中pandas字符串分割str.split()函数
Aug 05 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相当简单的分页类
2008/10/02 PHP
CI框架开发新浪微博登录接口源码完整版
2014/05/28 PHP
PHP之预定义接口详解
2015/07/29 PHP
php好代码风格的阶段性总结
2016/06/25 PHP
Javascript YUI 读码日记之 YAHOO.util.Dom - Part.3
2008/03/22 Javascript
jQuery Ajax异步处理Json数据详解
2013/11/05 Javascript
javascript放大镜效果的简单实现
2013/12/09 Javascript
js jquery ajax的几种用法总结(及优缺点介绍)
2014/01/28 Javascript
seaJs的模块定义和模块加载浅析
2014/06/06 Javascript
基于jQuery实现的文字按钮表单特效整理
2014/12/07 Javascript
JS把内容动态插入到DIV的实现方法
2016/07/19 Javascript
简单理解vue中track-by属性
2016/10/26 Javascript
jQuery插件HighCharts实现的2D条状图效果示例【附demo源码下载】
2017/03/15 Javascript
jQuery实现可兼容IE6的淡入淡出效果告警提示功能示例
2017/09/20 jQuery
JS基于贪心算法解决背包问题示例
2017/11/27 Javascript
浅谈Vue 数据响应式原理
2018/05/07 Javascript
Nodejs实现用户注册功能
2019/04/14 NodeJs
Vue+Node服务器查询Mongo数据库及页面数据传递操作实例分析
2019/12/20 Javascript
JavaScript this关键字指向常用情况解析
2020/09/02 Javascript
[01:32:10]NAVI vs VG Supermajor 败者组 BO3 第一场 6.5
2018/06/06 DOTA
python str与repr的区别
2013/03/23 Python
Python实现方便使用的级联进度信息实例
2015/05/05 Python
Python Sqlite3以字典形式返回查询结果的实现方法
2016/10/03 Python
python微信跳一跳系列之棋子定位颜色识别
2018/02/26 Python
python 将md5转为16字节的方法
2018/05/29 Python
python logging.basicConfig不生效的原因及解决
2020/02/20 Python
Python Django view 两种return的实现方式
2020/03/16 Python
详解pandas绘制矩阵散点图(scatter_matrix)的方法
2020/04/23 Python
python中判断文件结束符的具体方法
2020/08/04 Python
美国知名平价彩妆品牌:e.l.f. Cosmetics
2017/11/20 全球购物
薇姿法国官网:Vichy法国
2021/01/28 全球购物
《大禹治水》教学反思
2014/04/27 职场文书
2014年“四风”问题个人整改措施
2014/09/17 职场文书
2015年外贸业务员工作总结范文
2015/05/23 职场文书
刑事上诉状(量刑过重)
2015/05/23 职场文书
python 常用的异步框架汇总整理
2021/06/18 Python