举例区分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 相关文章推荐
php使用递归与迭代实现快速排序示例
Jan 23 Python
在Python中使用base64模块处理字符编码的教程
Apr 28 Python
Python使用pickle模块报错EOFError Ran out of input的解决方法
Aug 16 Python
PyQT实现菜单中的复制,全选和清空的功能的方法
Jun 17 Python
python 绘制拟合曲线并加指定点标识的实现
Jul 10 Python
python中有关时间日期格式转换问题
Dec 25 Python
Python单元测试模块doctest的具体使用
Feb 10 Python
Python气泡提示与标签的实现
Apr 01 Python
windows下的pycharm安装及其设置中文菜单
Apr 23 Python
详解Python 最短匹配模式
Jul 29 Python
Python使用urlretrieve实现直接远程下载图片的示例代码
Aug 17 Python
Python 实现RSA加解密文本文件
Dec 30 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面试题集锦
2012/03/08 PHP
PHP连接Access数据库的方法小结
2013/06/20 PHP
smarty半小时快速上手入门教程
2014/10/27 PHP
php使用ZipArchive提示Fatal error: Class ZipArchive not found in的解决方法
2014/11/04 PHP
php使用cookie保存登录用户名的方法
2015/01/26 PHP
理解Javascript_12_执行模型浅析
2010/10/18 Javascript
25个好玩的JavaScript小游戏分享
2011/04/22 Javascript
JS基础之undefined与null的区别分析
2011/08/08 Javascript
jquery与js函数冲突的两种解决方法
2013/09/09 Javascript
javascript 获取网页标题代码实例
2014/01/22 Javascript
DOM节点的替换或修改函数replaceChild()用法实例
2015/01/12 Javascript
js完美实现@提到好友特效(兼容各大浏览器)
2015/03/16 Javascript
Node.js connect ECONNREFUSED错误解决办法
2016/09/15 Javascript
Node.js测试中的Mock文件系统详解
2016/11/21 Javascript
Vue中如何实现proxy代理
2018/04/20 Javascript
Vue.Draggable拖拽功能的配置使用方法
2020/07/29 Javascript
个人小程序接入支付解决方案
2019/05/23 Javascript
angular inputNumber指令输入框只能输入数字的实现
2019/12/03 Javascript
JavaScript onclick事件使用方法详解
2020/05/15 Javascript
jQuery实现带进度条的轮播图
2020/09/13 jQuery
[00:32]DOTA2上海特级锦标赛 Ehome战队宣传片
2016/03/03 DOTA
使用Python的Bottle框架写一个简单的服务接口的示例
2015/08/25 Python
详解python中xlrd包的安装与处理Excel表格
2016/12/16 Python
Python基于回溯法子集树模板解决野人与传教士问题示例
2017/09/11 Python
Python使用Tkinter实现机器人走迷宫
2018/01/22 Python
Python实现简单查找最长子串功能示例
2019/02/26 Python
selenium 多窗口切换的实现(windows)
2020/01/18 Python
jupyter notebook 实现matplotlib图动态刷新
2020/04/22 Python
Feelunique德国官方网站:欧洲最大的在线美容零售商
2019/07/20 全球购物
Richards网上商店:当代时尚,遍布巴西
2019/11/03 全球购物
main 函数执行以前,还会执行什么代码
2013/04/17 面试题
STP协议的主要用途是什么?为什么要用STP
2012/12/20 面试题
幼儿园家长评语大全
2014/04/16 职场文书
教师专业自荐信
2014/05/31 职场文书
春节慰问简报
2015/07/21 职场文书
导游词之丽江普济寺
2019/10/22 职场文书