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 相关文章推荐
Tensorflow之构建自己的图片数据集TFrecords的方法
Feb 07 Python
神经网络(BP)算法Python实现及应用
Apr 16 Python
浅析Python装饰器以及装饰器模式
May 28 Python
IntelliJ IDEA安装运行python插件方法
Dec 10 Python
Appium Python自动化测试之环境搭建的步骤
Jan 23 Python
使用Python和Scribus创建一个RGB立方体的方法
Jul 17 Python
浅谈Django中的QueryDict元素为数组的坑
Mar 31 Python
Python任务调度模块APScheduler使用
Apr 15 Python
Pycharm 使用 Pipenv 新建的虚拟环境(图文详解)
Apr 16 Python
PyQt5连接MySQL及QMYSQL driver not loaded错误解决
Apr 29 Python
基于python实现复制文件并重命名
Sep 16 Python
浅谈Python numpy创建空数组的问题
May 25 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中字符查找函数strpos、strrchr与strpbrk用法
2014/11/18 PHP
php实现有序数组打印或排序的方法【附Python、C及Go语言实现代码】
2016/11/10 PHP
使用Git实现Laravel项目的自动化部署
2019/11/24 PHP
YII2框架中behavior行为的理解与使用方法示例
2020/03/13 PHP
mysql输出数据赋给js变量报unterminated string literal错误原因
2010/05/22 Javascript
ExtJs的Date格式字符代码
2010/12/30 Javascript
jquery分页插件AmSetPager(自写)
2013/04/15 Javascript
Ext JS 4实现带week(星期)的日期选择控件(实战一)
2013/08/21 Javascript
JavaScript中输出标签的方法
2014/08/27 Javascript
基于HTML5上使用iScroll实现下拉刷新,上拉加载更多
2016/05/21 Javascript
JavaScript浏览器对象之一Window对象详解
2016/06/03 Javascript
js实现移动端微信页面禁止字体放大
2017/02/16 Javascript
vue页面跳转后返回原页面初始位置方法
2018/02/11 Javascript
vue侧边栏动态生成下级菜单的方法
2018/09/07 Javascript
小程序云开发部署攻略(图文教程)
2018/10/30 Javascript
JS计算斐波拉切代码实例
2019/09/12 Javascript
webpack HappyPack实战详解
2019/10/08 Javascript
浅谈Vue开发人员的7个最好的VSCode扩展
2021/01/20 Vue.js
python解析html开发库pyquery使用方法
2014/02/07 Python
python转换摩斯密码示例
2014/02/16 Python
Python解决鸡兔同笼问题的方法
2014/12/20 Python
由Python运算π的值深入Python中科学计算的实现
2015/04/17 Python
基于python实现的百度新歌榜、热歌榜下载器(附代码)
2019/08/05 Python
一款纯css3制作的2015年元旦雪人动画特效教程
2014/12/29 HTML / CSS
html5 制作地图当前定位箭头的方法示例
2020/01/10 HTML / CSS
群胜软件Java笔试题
2012/09/29 面试题
投标邀请书范文
2014/01/31 职场文书
保护环境建议书300字
2014/05/13 职场文书
银行求职信怎么写
2014/05/26 职场文书
导航工程专业自荐信
2014/09/02 职场文书
保密法制宣传月活动总结
2015/05/07 职场文书
2015民办小学年度工作总结
2015/05/26 职场文书
经销商会议开幕词
2016/03/04 职场文书
Python绘制地图神器folium的新人入门指南
2021/05/23 Python
ORACLE数据库应用开发的三十个注意事项
2021/06/07 Oracle
Vue Element plus使用方法梳理
2022/12/24 Vue.js