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基于Pymssql模块实现连接SQL Server数据库的方法详解
Jul 20 Python
Python:Scrapy框架中Item Pipeline组件使用详解
Dec 27 Python
Python获取本机所有网卡ip,掩码和广播地址实例代码
Jan 22 Python
详解tensorflow载入数据的三种方式
Apr 24 Python
python日志logging模块使用方法分析
May 23 Python
pandas 选取行和列数据的方法详解
Aug 08 Python
Django ValuesQuerySet转json方式
Mar 16 Python
Kears 使用:通过回调函数保存最佳准确率下的模型操作
Jun 17 Python
删除pycharm鼠标右键快捷键打开项目的操作
Jan 16 Python
python中random模块详解
Mar 01 Python
如何Python使用re模块实现okenizer
Apr 30 Python
Django框架模板用法详解
Jun 10 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
人大复印资料处理程序_补充篇
2006/10/09 PHP
PHP下利用shell后台运行PHP脚本,并获取该脚本的Process ID的代码
2011/09/19 PHP
php的zip解压缩类pclzip使用示例
2014/03/14 PHP
简单实用的网站PHP缓存类实例
2014/07/18 PHP
php session的锁和并发
2016/01/22 PHP
php 数组随机取值的简单实例
2016/05/23 PHP
php 实现简单的登录功能示例【基于thinkPHP框架】
2019/12/02 PHP
php自动加载代码实例详解
2021/02/26 PHP
如何取得中文输入的真实长度?
2006/06/24 Javascript
js的with语句使用方法
2007/09/21 Javascript
JavaScript CSS修改学习第一章 查找位置
2010/02/19 Javascript
JavaScript实现统计文本框Textarea字数增强用户体验
2012/12/21 Javascript
jquery中$.post()方法的简单实例
2014/02/04 Javascript
jQuery使用drag效果实现自由拖拽div
2015/06/11 Javascript
jquery实现鼠标点击后展开列表内容的导航栏效果
2015/09/14 Javascript
Javascript技术难点之apply,call与this之间的衔接
2015/12/04 Javascript
探讨:JavaScript ECAMScript5 新特性之get/set访问器
2016/05/05 Javascript
Angular JS数据的双向绑定详解及实例
2016/12/31 Javascript
微信小程序之拖拽排序(代码分享)
2017/01/21 Javascript
bootstrap选项卡扩展功能详解
2017/06/14 Javascript
详解vue中computed 和 watch的异同
2017/06/30 Javascript
基于ExtJs在页面上window再调用Window的事件处理方法
2017/07/26 Javascript
微信小程序实现滑动切换自定义页码的方法分析
2018/12/29 Javascript
[06:07]DOTA2-DPC中国联赛3月5日Recap集锦
2021/03/11 DOTA
Python中Continue语句的用法的举例详解
2015/05/14 Python
Python简单实现安全开关文件的两种方式
2016/09/19 Python
Python设置在shell脚本中自动补全功能的方法
2018/06/25 Python
python中logging模块的一些简单用法的使用
2019/02/22 Python
使用python serial 获取所有的串口名称的实例
2019/07/02 Python
django框架两个使用模板实例
2019/12/11 Python
Numpy 多维数据数组的实现
2020/06/18 Python
canvas 橡皮筋式线条绘图应用方法
2019/02/13 HTML / CSS
Booking.com亚太地区:Booking.com APAC
2020/02/07 全球购物
写一个函数,求一个字符串的长度。在main函数中输入字符串,并输出其长度
2015/11/18 面试题
财务会计专业自荐书
2014/06/30 职场文书
免职通知
2015/04/23 职场文书