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 client使用http post 到server端的代码
Feb 10 Python
python3.3实现乘法表示例
Feb 07 Python
python中Genarator函数用法分析
Apr 08 Python
Python的Django框架中settings文件的部署建议
May 30 Python
在Python的Django框架中使用通用视图的方法
Jul 21 Python
Python实现自动上京东抢手机
Feb 06 Python
python 格式化输出百分号的方法
Jan 20 Python
VScode连接远程服务器上的jupyter notebook的实现
Apr 23 Python
基于Python测试程序是否有错误
May 16 Python
浅谈python 调用open()打开文件时路径出错的原因
Jun 05 Python
Python调用C/C++的方法解析
Aug 05 Python
用Python将库打包发布到pypi
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
Protoss魔法科技
2020/03/14 星际争霸
Session保存到数据库的php类分享
2011/10/24 PHP
详解PHP中strlen和mb_strlen函数的区别
2014/03/07 PHP
layui框架实现文件上传及TP3.2.3(thinkPHP)对上传文件进行后台处理操作示例
2018/05/12 PHP
JQUERY操作JSON实例代码
2010/02/09 Javascript
基于jquery的代码显示区域自动拉长效果
2011/12/07 Javascript
jquery查找父元素、子元素(个人经验总结)
2014/04/09 Javascript
jQuery简单几行代码实现tab切换
2015/03/10 Javascript
纯JS实现可拖拽表单的简单实例
2016/09/02 Javascript
js实现简单的选项卡效果
2017/02/23 Javascript
Vue 进阶教程之v-model详解
2017/05/06 Javascript
详解angular笔记路由之angular-router
2017/09/12 Javascript
Web技术实现移动监测的介绍
2017/09/18 Javascript
redux中间件之redux-thunk的具体使用
2018/04/17 Javascript
vue项目设置scrollTop不起作用(总结)
2018/12/21 Javascript
微信小程序用户授权,以及判断登录是否过期的方法
2019/05/10 Javascript
layui 上传插件 带预览 非自动上传功能的实例(非常实用)
2019/09/23 Javascript
vue进入页面时不在顶部,检测滚动返回顶部按钮问题及解决方法
2019/10/30 Javascript
[01:04:05]Mineski vs TNC 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
Python3 正在毁灭 Python的原因分析
2014/11/28 Python
Python实现图像几何变换
2015/07/06 Python
python操作mysql数据库
2017/03/05 Python
python实现控制台打印的方法
2019/01/12 Python
python scatter散点图用循环分类法加图例
2019/03/19 Python
使用 tf.nn.dynamic_rnn 展开时间维度方式
2020/01/21 Python
Python把图片转化为pdf代码实例
2020/07/28 Python
Pycharm安装python库的方法
2020/11/24 Python
css3中背景尺寸background-size详解
2014/09/02 HTML / CSS
印度低票价航空公司:GoAir
2017/10/11 全球购物
如何利用find命令查找文件
2015/02/07 面试题
Jdbc数据访问技术面试题
2012/03/30 面试题
机械专业应届毕业生自荐书
2014/06/12 职场文书
2014年小学生迎国庆65周年演讲稿
2014/09/27 职场文书
文言文辞职信
2015/02/28 职场文书
神秘岛读书笔记
2015/07/01 职场文书
暑假生活随笔
2015/08/15 职场文书