举例区分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实现上传样本到virustotal并查询扫描信息的方法
Oct 05 Python
用Python进行一些简单的自然语言处理的教程
Mar 31 Python
使用Python的PIL模块来进行图片对比
Feb 18 Python
python删除本地夹里重复文件的方法
Nov 19 Python
Python中print和return的作用及区别解析
May 05 Python
pandas中的series数据类型详解
Jul 06 Python
下载官网python并安装的步骤详解
Oct 12 Python
django框架auth模块用法实例详解
Dec 10 Python
Python模块的制作方法实例分析
Dec 21 Python
如何基于python操作json文件获取内容
Dec 24 Python
Python3实现建造者模式的示例代码
Jun 28 Python
python3中布局背景颜色代码分析
Dec 01 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 file_get_contents设置超时处理方法
2013/09/30 PHP
PHP屏蔽过滤指定关键字的方法
2014/11/03 PHP
php常用表单验证类用法实例
2015/06/18 PHP
PHP线程的内存回收问题
2016/07/08 PHP
visual studio code 调试php方法(图文详解)
2017/09/15 PHP
PHP给源代码加密的几种方法汇总(推荐)
2018/02/06 PHP
Extjs ajax同步请求时post方式参数发送方式
2009/08/05 Javascript
用jquery写的菜单从左往右滑动出现
2014/04/11 Javascript
JavaScript弹出窗口方法汇总
2014/08/12 Javascript
JavaScript通过setTimeout实时显示当前时间的方法
2015/04/16 Javascript
使用AngularJS编写较为优美的JavaScript代码指南
2015/06/19 Javascript
JavaScript严格模式详解
2015/11/18 Javascript
点评js异步加载的4种方式
2015/12/22 Javascript
JSON字符串转换JSONObject和JSONArray的方法
2016/06/03 Javascript
AngularJS实现的省市二级联动功能示例【可对选项实现增删】
2017/10/26 Javascript
vue.js中created方法作用
2018/03/30 Javascript
基于JS实现计算24点算法代码实例解析
2020/07/23 Javascript
python实现的文件夹清理程序分享
2014/11/22 Python
详解python之多进程和进程池(Processing库)
2017/06/09 Python
使用 Python 实现微信公众号粉丝迁移流程
2018/01/03 Python
python之从文件读取数据到list的实例讲解
2018/04/19 Python
使用pandas批量处理矢量化字符串的实例讲解
2018/07/10 Python
基于python实现简单日历
2018/07/28 Python
在pycharm 中添加运行参数的操作方法
2019/01/19 Python
matplotlib命令与格式之tick坐标轴日期格式(设置日期主副刻度)
2019/08/06 Python
基于Python实现ComicReaper漫画自动爬取脚本过程解析
2019/11/11 Python
css3截图_动力节点Java学院整理
2017/07/11 HTML / CSS
Html5大文件断点续传实现方法
2015/12/05 HTML / CSS
美国男装连锁零售商:Men’s Wearhouse
2016/10/14 全球购物
Booking.com荷兰:全球酒店网上预订
2017/08/22 全球购物
护理学毕业生自荐信
2013/10/02 职场文书
技术副厂长岗位职责
2013/12/26 职场文书
季度思想汇报
2014/01/01 职场文书
解决Pytorch中关于model.eval的问题
2021/05/22 Python
Redis Cluster 字段模糊匹配及删除
2021/05/27 Redis
Python 如何实现文件自动去重
2021/06/02 Python