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网络编程学习笔记(五):socket的一些补充
Jun 09 Python
分享15个最受欢迎的Python开源框架
Jul 13 Python
Python实现TCP协议下的端口映射功能的脚本程序示例
Jun 14 Python
Python基于正则表达式实现检查文件内容的方法【文件检索】
Aug 30 Python
python 机器学习之支持向量机非线性回归SVR模型
Jun 26 Python
详解利用OpenCV提取图像中的矩形区域(PPT屏幕等)
Jul 01 Python
Django stark组件使用及原理详解
Aug 22 Python
使用python实现飞机大战游戏
Mar 23 Python
Python日志logging模块功能与用法详解
Apr 09 Python
基于FME使用Python过程图解
May 13 Python
python中slice参数过长的处理方法及实例
Dec 15 Python
Python中的程序流程控制语句
Feb 24 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中Smarty模板初体验
2011/08/08 PHP
php中使用__autoload()自动加载未定义类的实现代码
2013/02/06 PHP
php校验表单检测字段是否为空的方法
2015/03/20 PHP
Windows下编译PHP5.4和xdebug全记录
2015/04/03 PHP
php实现的mysqldb读写分离操作类示例
2017/02/07 PHP
Laravel中如何增加自定义全局函数详解
2017/05/09 PHP
tp5框架内使用tp3.2分页的方法分析
2019/05/05 PHP
ThinkPHP5+UEditor图片上传到阿里云对象存储OSS功能示例
2019/08/05 PHP
PHP 8新特性简介
2020/08/18 PHP
JSON 学习之JSON in JavaScript详细使用说明
2010/02/23 Javascript
精心挑选的15款优秀jQuery 本特效插件和教程
2012/08/06 Javascript
实用的JS正则表达式(手机号码/IP正则/邮编正则/电话等)
2013/01/11 Javascript
父节点获取子节点的字符串示例代码
2014/02/26 Javascript
node.js使用npm 安装插件时提示install Error: ENOENT报错的解决方法
2014/11/20 Javascript
用jQuery获取table中行id和td值的实现代码
2016/05/19 Javascript
深入理解jQuery之防止冒泡事件
2016/05/24 Javascript
jQuery+ThinkPHP+Ajax实现即时消息提醒功能实例代码
2017/03/21 jQuery
PostgreSQL Node.js实现函数计算方法示例
2019/02/12 Javascript
深入解读Node.js中的koa源码
2019/06/17 Javascript
python笔记(2)
2012/10/24 Python
利用Python绘制数据的瀑布图的教程
2015/04/07 Python
python中__slots__用法实例
2015/06/04 Python
Python编程中的异常处理教程
2015/08/21 Python
Python + selenium自动化环境搭建的完整步骤
2018/05/19 Python
在dataframe两列日期相减并且得到具体的月数实例
2018/07/03 Python
python爬取淘宝商品销量信息
2018/11/16 Python
基于Django的乐观锁与悲观锁解决订单并发问题详解
2019/07/31 Python
python GUI库图形界面开发之PyQt5控件数据拖曳Drag与Drop详细使用方法与实例
2020/02/27 Python
python中编写函数并调用的知识点总结
2021/01/13 Python
html5自动播放mov格式视频的实例代码
2020/01/14 HTML / CSS
瑞典在互联网上最大的宠物商店:Animail
2020/10/31 全球购物
募捐感谢信
2015/01/22 职场文书
教师辞职书范文
2015/02/26 职场文书
首次购房证明
2015/06/19 职场文书
Golang获取List列表元素的四种方式
2022/04/20 Golang
JavaScript正则表达式实现注册信息校验功能
2022/05/30 Java/Android