举例区分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基于DES算法加密解密实例
Jun 03 Python
Python使用微信SDK实现的微信支付功能示例
Jun 30 Python
GitHub 热门:Python 算法大全,Star 超过 2 万
Apr 29 Python
PyCharm 创建指定版本的 Django(超详图解教程)
Jun 18 Python
python区块及区块链的开发详解
Jul 03 Python
python flask搭建web应用教程
Nov 19 Python
如何用Python绘制3D柱形图
Sep 16 Python
Python APScheduler执行使用方法详解
Dec 10 Python
利用Python实现学生信息管理系统的完整实例
Dec 30 Python
用Python制作音乐海报
Jan 26 Python
Python3使用tesserocr识别字母数字验证码的实现
Jan 29 Python
python实现的web监控系统
Apr 27 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中转义mysql语句的实现代码
2011/06/24 PHP
在多个页面使用同一个HTML片段的代码
2011/03/04 Javascript
jQuery1.6 正式版发布并提供下载
2011/05/05 Javascript
javascript 原型继承介绍
2011/08/30 Javascript
jQuery EasyUI API 中文文档 - Pagination分页
2011/09/29 Javascript
js中的异常处理try...catch使用介绍
2013/09/21 Javascript
js处理php输出时间戳对不上号的解决方法
2014/06/20 Javascript
jQuery制作可自定义大小的拼图游戏
2015/03/30 Javascript
jquery右下角自动弹出可关闭的广告层
2015/05/08 Javascript
JS实现同一个网页布局滑动门和TAB选项卡实例
2015/09/23 Javascript
使用JQuery中的trim()方法去掉前后空格
2016/09/16 Javascript
原生JS实现导航下拉菜单效果
2020/11/25 Javascript
JavaScript使用原型和原型链实现对象继承的方法详解
2017/04/05 Javascript
vue删除html内容的标签样式实例
2018/09/13 Javascript
JQuery常用选择器功能与用法实例分析
2019/12/23 jQuery
在VUE中使用lodash的debounce和throttle操作
2020/11/09 Javascript
[49:08]FNATIC vs Infamous 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
Python中logging模块的用法实例
2014/09/29 Python
python base64 decode incorrect padding错误解决方法
2015/01/08 Python
Python常用知识点汇总
2016/05/08 Python
python re正则匹配网页中图片url地址的方法
2018/12/20 Python
使用Python调取任意数字资产钱包余额功能
2019/08/15 Python
python3 mmh3安装及使用方法
2019/10/09 Python
pycharm如何实现跨目录调用文件
2020/02/28 Python
Python实现检测文件的MD5值来查找重复文件案例
2020/03/12 Python
Python建造者模式案例运行原理解析
2020/06/29 Python
python接入支付宝的实例操作
2020/07/20 Python
Python 如何调试程序崩溃错误
2020/08/03 Python
PyCharm2020.3.2安装超详细教程
2021/02/08 Python
英国排名第一的最新设计师品牌手表独立零售商:TIC Watches
2016/09/24 全球购物
美国首屈一指的高品质珠宝设计师和零售商:Allurez
2018/01/23 全球购物
铭万公司.net面试题笔试题
2014/07/20 面试题
交通法规咨询中心工作职责
2013/11/27 职场文书
人事专员职责
2014/02/22 职场文书
秋天的雨教学反思
2014/04/27 职场文书
信用卡收入证明范本
2015/06/12 职场文书