举例区分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 相关文章推荐
Djang中静态文件配置方法
Jul 30 Python
Python3.6简单操作Mysql数据库
Sep 12 Python
分享vim python缩进等一些配置
Jul 02 Python
Python编程中flask的简介与简单使用
Dec 28 Python
python 切换root 执行命令的方法
Jan 19 Python
Python选择网卡发包及接收数据包
Apr 04 Python
解决pymysql cursor.fetchall() 获取不到数据的问题
May 15 Python
Python unittest单元测试openpyxl实现过程解析
May 27 Python
Python with语句用法原理详解
Jul 03 Python
python读取xml文件方法解析
Aug 04 Python
Python Matplotlib绘图基础知识代码解析
Aug 31 Python
vue.js刷新当前页面的实例讲解
Dec 29 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
Snoopy类使用小例子
2008/04/15 PHP
PHP 显示客户端IP与服务器IP的代码
2010/10/12 PHP
PHP FOR MYSQL 代码生成助手(根据Mysql里的字段自动生成类文件的)
2011/07/23 PHP
微信开发之php表单微信中自动提交两次问题解决办法
2017/01/08 PHP
yii2.0框架数据库操作简单示例【添加,修改,删除,查询,打印等】
2020/04/13 PHP
laravel admin实现分类树/模型树的示例代码
2020/06/10 PHP
javascript 闭包
2011/09/15 Javascript
jquery $(this).attr $(this).val方法使用介绍
2013/10/08 Javascript
详细AngularJs4的图片剪裁组件的实例
2017/07/12 Javascript
Vuejs实现购物车功能
2017/11/05 Javascript
vue 插值 v-once,v-text, v-html详解
2018/01/19 Javascript
nodejs+mongodb aggregate级联查询操作示例
2018/03/17 NodeJs
原生js+css调节音量滑块
2020/01/15 Javascript
浅析JavaScript中的事件委托机制跟深浅拷贝
2021/01/20 Javascript
[01:34]2014DOTA2 TI预选赛预选赛 选手比赛房大揭秘!
2014/05/20 DOTA
[38:39]完美世界DOTA2联赛循环赛 IO vs GXR BO2第二场 11.04
2020/11/05 DOTA
详谈python http长连接客户端
2017/06/12 Python
Python通过matplotlib画双层饼图及环形图简单示例
2017/12/15 Python
浅析Python 3 字符串中的 STR 和 Bytes 有什么区别
2018/10/14 Python
Python中xml和json格式相互转换操作示例
2018/12/05 Python
pyqt5 实现 下拉菜单 + 打开文件的示例代码
2019/06/20 Python
python 回溯法模板详解
2020/02/26 Python
利用html5 canvas破解简单验证码及getImageData接口应用
2013/01/25 HTML / CSS
Mytheresa美国官网:德国知名的女性奢侈品电商
2017/05/27 全球购物
Foot Locker德国官方网站:美国运动服和鞋类零售商
2018/11/01 全球购物
美国椅子和沙发制造商:La-Z-Boy
2020/10/25 全球购物
保安岗位职责
2014/02/21 职场文书
事业单位竞聘上岗实施方案
2014/03/28 职场文书
团日活动总结范文
2014/04/25 职场文书
2014老师三严三实对照检查材料思想汇报
2014/09/18 职场文书
秋季校运会广播稿100字
2014/09/18 职场文书
党的群众路线教育实践活动对照检查材料(教师)
2014/09/24 职场文书
教师思想作风整顿个人剖析材料
2014/10/10 职场文书
小王子读书笔记
2015/06/29 职场文书
2016新年年会主持词
2015/07/06 职场文书
拙作再改《我的收音机情缘》
2022/04/05 无线电