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登录QQ邮箱发信的实现代码
Feb 10 Python
如何搜索查找并解决Django相关的问题
Jun 30 Python
详解Python中dict与set的使用
Aug 10 Python
Python实现感知器模型、两层神经网络
Dec 19 Python
酷! 程序员用Python带你玩转冲顶大会
Jan 17 Python
python 读文件,然后转化为矩阵的实例
Apr 23 Python
pandas DataFrame 根据多列的值做判断,生成新的列值实例
May 18 Python
python实现字符串和字典的转换
Sep 29 Python
对python:print打印时加u的含义详解
Dec 15 Python
python处理“
Jun 10 Python
PyCharm中代码字体大小调整方法
Jul 29 Python
python3 selenium自动化 frame表单嵌套的切换方法
Aug 23 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
thinkphp多表查询两表有重复相同字段的完美解决方法
2016/09/22 PHP
thinkPHP3.2使用RBAC实现权限管理的实现
2019/08/27 PHP
动感效果的TAB选项卡jquery 插件
2011/07/09 Javascript
通过设置CSS中的position属性来固定层的位置
2015/12/14 Javascript
Javascript的表单验证-提交表单
2016/03/18 Javascript
基于BootStrap栅格栏系统完成网站底部版权信息区
2016/12/23 Javascript
Three.js基础部分学习
2017/01/08 Javascript
利用vueJs实现图片轮播实例代码
2017/06/03 Javascript
Vue2.0 从零开始_环境搭建操作步骤
2017/06/14 Javascript
Vue实现一个返回顶部backToTop组件
2017/07/25 Javascript
浅谈手写node可读流之流动模式
2018/06/01 Javascript
JavaScript创建对象方法实例小结
2018/09/03 Javascript
详解jQuery如何实现模糊搜索
2019/05/10 jQuery
layer更改皮肤的实现方法
2019/09/11 Javascript
详解Vue中的Props与Data细微差别
2020/03/02 Javascript
[01:07:53]RNG vs VG 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
[05:37]DOTA2-DPC中国联赛 正赛 Elephant vs iG 选手采访
2021/03/11 DOTA
python爬虫教程之爬取百度贴吧并下载的示例
2014/03/07 Python
python基于xml parse实现解析cdatasection数据
2014/09/30 Python
Python中有趣在__call__函数
2015/06/21 Python
举例讲解Python面向对象编程中类的继承
2016/06/17 Python
13个最常用的Python深度学习库介绍
2017/10/28 Python
浅谈Python2、Python3相对路径、绝对路径导入方法
2018/06/22 Python
DataFrame:通过SparkSql将scala类转为DataFrame的方法
2019/01/29 Python
Python中print函数简单使用总结
2019/08/05 Python
pytorch获取vgg16-feature层输出的例子
2019/08/20 Python
Python函数参数定义及传递方式解析
2020/06/10 Python
Pycharm中配置远程Docker运行环境的教程图解
2020/06/11 Python
基于CSS3的CSS 多栏(Multi-column)实现瀑布流源码分享
2014/06/11 HTML / CSS
娇韵诗加拿大官网:Clarins加拿大
2017/11/20 全球购物
外企C语言笔试题
2013/11/10 面试题
岗位职责范本
2013/11/23 职场文书
模范家庭事迹材料
2014/02/10 职场文书
挂科检讨书范文
2014/02/20 职场文书
民事赔偿协议书
2014/11/02 职场文书
python获取对象信息的实例详解
2021/07/07 Python