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正则用法实例讲解
Jun 21 Python
python正则表达式的使用
Jun 12 Python
django使用xlwt导出excel文件实例代码
Feb 06 Python
Python3利用Dlib实现摄像头实时人脸检测和平铺显示示例
Feb 21 Python
python中tkinter的应用:修改字体的实例讲解
Jul 17 Python
python3 tkinter实现添加图片和文本
Nov 26 Python
python 字典套字典或列表的示例
Dec 16 Python
Python3标准库之functools管理函数的工具详解
Feb 27 Python
python GUI库图形界面开发之PyQt5状态栏控件QStatusBar详细使用方法实例
Feb 28 Python
python GUI库图形界面开发之PyQt5布局控件QVBoxLayout详细使用方法与实例
Mar 06 Python
Python 制作查询商品历史价格的小工具
Oct 20 Python
PyTorch 中的傅里叶卷积实现示例
Dec 11 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 字符转义 注意事项
2009/05/27 PHP
ThinkPHP实现跨模块调用操作方法概述
2014/06/20 PHP
TP3.2框架分页相关实现方法分析
2020/06/03 PHP
js停止输出代码
2008/07/20 Javascript
javascript或asp实现的判断身份证号码是否正确两种验证方法
2009/11/26 Javascript
根据对象的某一属性进行排序的js代码(如:name,age)
2010/08/10 Javascript
javascript遍历控件实例详细解析
2014/01/10 Javascript
Ext4.2的Ext.grid.plugin.RowExpander无法触发事件解决办法
2014/08/15 Javascript
js实现checkbox全选、不选与反选的方法
2015/02/09 Javascript
jQuery插件slick实现响应式移动端幻灯片图片切换特效
2015/04/12 Javascript
javascript实现的闭包简单实例
2015/07/17 Javascript
基于Arcgis for javascript实现百度地图ABCD marker的效果
2015/09/12 Javascript
Bootstrap自动适应PC、平板、手机的Bootstrap栅格系统
2016/05/27 Javascript
Node.js中使用mongoose操作mongodb数据库的方法
2017/09/12 Javascript
微信小程序使用二次贝塞尔曲线画波浪
2018/12/25 Javascript
Vue实现远程获取路由与页面刷新导致404错误的解决
2019/01/31 Javascript
JavaScript实现获取两个排序数组的中位数算法示例
2019/02/26 Javascript
python调用短信猫控件实现发短信功能实例
2014/07/04 Python
python实现简单的计时器功能函数
2015/03/14 Python
python统计多维数组的行数和列数实例
2018/06/23 Python
Python numpy.array()生成相同元素数组的示例
2018/11/12 Python
python用pandas数据加载、存储与文件格式的实例
2018/12/07 Python
使用Python 统计高频字数的方法
2019/01/31 Python
python3.8.1+selenium实现登录滑块验证功能
2020/05/22 Python
分享unittest单元测试框架中几种常用的用例加载方法
2020/12/02 Python
HTML5 video视频字幕的使用和制作方法
2018/05/03 HTML / CSS
伊芙丽官方旗舰店:中国淑女一线品牌
2017/12/01 全球购物
英国最大的独立玩具专卖店:The Entertainer
2019/09/06 全球购物
局域网定义和特性
2016/01/23 面试题
毕业生自我鉴定
2013/11/05 职场文书
向领导表决心的话
2014/03/11 职场文书
化工工艺设计求职信
2014/06/25 职场文书
优秀三好学生事迹材料
2014/08/31 职场文书
销售经理工作失职检讨书
2014/10/24 职场文书
少年派的奇幻漂流观后感
2015/06/08 职场文书
JavaScript声明变量和数据类型的转换
2022/04/12 Javascript