举例区分Python中的浅复制与深复制


Posted in Python onJuly 02, 2015

copy模块用于对象的拷贝操作。该模块非常简单,只提供了两个主要的方法: copy.copy 与 copy.deepcopy ,分别表示浅复制与深复制。什么是浅复制,什么是深复制,网上有一卡车一卡车的资料,这里不作详细介绍。复制操作只对复合对象有效。用简单的例子来分别介绍这两个方法。

浅复制只复制对象本身,没有复制该对象所引用的对象。
 

#coding=gbk
import copy
l1 = [1, 2, [3, 4]]
l2 = copy.copy(l1)
print l1
print l2
l2[2][0] = 50
print l1
print l2
#---- 结果 ----
[1, 2, [3, 4]]
[1, 2, [3, 4]]
[1, 2, [50, 4]]
[1, 2, [50, 4]]

同样的代码,使用深复制,结果就不一样:
 

import copy
l1 = [1, 2, [3, 4]]
l2 = copy.deepcopy(l1)
print l1
print l2
l2[2][0] = 50
print l1
print l2
#---- 结果 ----
[1, 2, [3, 4]]
[1, 2, [3, 4]]
[1, 2, [3, 4]]
[1, 2, [50, 4]]

改变copy的默认行为

在定义类的时候,通过定义__copy__和__deepcopy__方法,可以改变copy的默认行为。下面是一个简单的例子:
 

class CopyObj(object):
  def __repr__(self):
    return "CopyObj"
   
  def __copy__(self):
    return "Hello"
obj = CopyObj()
obj1 = copy.copy(obj)
print obj
print obj1
#---- 结果 ----
CopyObj
Hello
Python 相关文章推荐
python使用7z解压软件备份文件脚本分享
Feb 21 Python
理解生产者消费者模型及在Python编程中的运用实例
Jun 26 Python
浅谈Django的缓存机制
Aug 23 Python
Python中按值来获取指定的键
Mar 04 Python
程序员的七夕用30行代码让Python化身表白神器
Aug 07 Python
基于YUV 数据格式详解及python实现方式
Dec 09 Python
python wxpython 实现界面跳转功能
Dec 17 Python
代码总结Python2 和 Python3 字符串的区别
Jan 28 Python
python matplotlib:plt.scatter() 大小和颜色参数详解
Apr 14 Python
为什么说python更适合树莓派编程
Jul 20 Python
Python paramiko使用方法代码汇总
Nov 20 Python
一篇文章弄懂Python中的内建函数
Aug 07 Python
Python多进程机制实例详解
Jul 02 #Python
Python回调函数用法实例详解
Jul 02 #Python
在Python中marshal对象序列化的相关知识
Jul 01 #Python
python保存字符串到文件的方法
Jul 01 #Python
python选择排序算法实例总结
Jul 01 #Python
python实现的希尔排序算法实例
Jul 01 #Python
python获取一组汉字拼音首字母的方法
Jul 01 #Python
You might like
php二维数组排序方法(array_multisort usort)
2013/12/25 PHP
PHP实现获取某个月份周次信息的方法
2015/08/11 PHP
php rsa 加密,解密,签名,验签详解
2016/12/06 PHP
PHP文件上传小程序 适合初学者学习!
2019/05/23 PHP
javascript 表格排序和表头浮动效果(扩展SortTable)
2009/04/07 Javascript
用Javascript实现Sleep暂停功能代码
2010/09/03 Javascript
JS获取节点的兄弟,父级,子级元素的方法
2014/01/09 Javascript
jquery中get和post的简单实例
2014/02/04 Javascript
js实现键盘控制DIV移动的方法
2015/01/10 Javascript
jquery实现的判断倒计时是否结束代码
2016/02/05 Javascript
Javascript计算二维数组重复值示例代码
2016/12/18 Javascript
输入框点击时边框变色效果的实现方法
2016/12/26 Javascript
vue调用高德地图实例代码
2017/04/28 Javascript
Bootstrap输入框组件使用详解
2017/06/09 Javascript
C#程序员入门学习微信小程序的笔记
2019/03/05 Javascript
python实现简单爬虫功能的示例
2016/10/24 Python
浅析python协程相关概念
2018/01/20 Python
python 中的list和array的不同之处及转换问题
2018/03/13 Python
python 表格打印代码实例解析
2019/10/12 Python
pytorch 实现在预训练模型的 input上增减通道
2020/01/06 Python
Python如何在DataFrame增加数值
2020/02/14 Python
Python使用20行代码实现微信聊天机器人
2020/06/05 Python
Python3爬虫关于识别点触点选验证码的实例讲解
2020/07/30 Python
html5使用canvas绘制太阳系效果
2014/12/15 HTML / CSS
Vision Directa智利眼镜网:框架眼镜、隐形眼镜和名牌太阳眼镜
2016/11/23 全球购物
医学生实习自荐信
2013/10/01 职场文书
个人应聘自我评价分享
2013/11/18 职场文书
工程业务员工作职责
2013/12/07 职场文书
大学生校园创业计划书
2014/02/08 职场文书
2014年学校党建工作汇报材料
2014/11/02 职场文书
2014年纪检部工作总结
2014/11/12 职场文书
巾帼文明岗汇报材料
2014/12/24 职场文书
工作失误检讨书
2015/01/26 职场文书
教师师德工作总结2015
2015/07/22 职场文书
《乌鸦喝水》教学反思
2016/02/19 职场文书
承诺书的内容有哪些,怎么写?
2019/06/21 职场文书