举例区分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批量下载图片的三种方法
Apr 22 Python
python中的格式化输出用法总结
Jul 28 Python
Python 基础教程之包和类的用法
Feb 23 Python
python实现感知器算法详解
Dec 19 Python
Django 实现购物车功能的示例代码
Oct 08 Python
利用Python进行图像的加法,图像混合(附代码)
Jul 14 Python
Python 实现将数组/矩阵转换成Image类
Jan 09 Python
Python中sorted()排序与字母大小写的问题
Jan 14 Python
TensorFlow绘制loss/accuracy曲线的实例
Jan 21 Python
PyCharm 无法 import pandas 程序卡住的解决方式
Mar 09 Python
Python 使用office365邮箱的示例
Oct 29 Python
python 常用的异步框架汇总整理
Jun 18 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动态变静态原理
2006/11/25 PHP
php+dojo 的数据库保存拖动布局的一个方法dojo 这里下载
2007/03/07 PHP
php使用glob函数快速查询指定目录文件的方法
2014/11/15 PHP
深入探究PHP的多进程编程方法
2015/08/18 PHP
Yii清理缓存的方法
2016/01/06 PHP
JavaScript 常用函数
2009/12/30 Javascript
transport.js和jquery冲突问题的解决方法
2015/02/10 Javascript
分享12个非常实用的JavaScript小技巧
2016/05/11 Javascript
移动端使用localStorage缓存Js和css文的方法(web开发)
2016/09/20 Javascript
js如何获取网页所有图片
2017/05/12 Javascript
详解JavaScript调用栈、尾递归和手动优化
2017/06/03 Javascript
CSS3结合jQuery实现动画效果及回调函数的实例
2017/12/27 jQuery
node下使用UglifyJS压缩合并JS文件的方法
2018/03/07 Javascript
JavaScript分步实现一个出生日期的正则表达式
2018/03/22 Javascript
Nodejs让异步变成同步的方法
2019/03/02 NodeJs
vue swipe自定义组件实现轮播效果
2019/07/03 Javascript
微信小程序实现多行文字超出部分省略号显示功能
2019/10/23 Javascript
vue基于better-scroll实现左右联动滑动页面
2020/06/30 Javascript
vue实现前端列表多条件筛选
2020/10/26 Javascript
[56:01]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 Effect vs EG
2018/03/31 DOTA
Python面向对象编程中的类和对象学习教程
2015/03/30 Python
用Python中的wxPython实现最基本的浏览器功能
2015/04/14 Python
python实现二分查找算法
2017/09/21 Python
python实现归并排序算法
2018/11/22 Python
django的ORM操作 删除和编辑实现详解
2019/07/24 Python
Python获取二维数组的行列数的2种方法
2020/02/11 Python
python Matplotlib模块的使用
2020/09/16 Python
python自动化测试三部曲之unittest框架的实现
2020/10/07 Python
python编程的核心知识点总结
2021/02/08 Python
学校志愿者活动总结
2014/06/27 职场文书
教师党员批评与自我批评
2014/10/15 职场文书
文明班级申报材料
2014/12/24 职场文书
2017寒假社会实践心得体会范文
2016/01/14 职场文书
医护人员继续教育学习心得体会
2016/01/19 职场文书
Windows安装Anaconda3的方法及使用过程详解
2021/06/11 Python
Centos7 Shell编程之正则表达式、文本处理工具详解
2022/08/05 Servers