举例区分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中文乱码的解决方法
Nov 04 Python
Python实现类似jQuery使用中的链式调用的示例
Jun 16 Python
Python代码打开本地.mp4格式文件的方法
Jan 03 Python
wxpython绘制圆角窗体
Nov 18 Python
Tensorflow实现部分参数梯度更新操作
Jan 23 Python
使用Python爬虫库requests发送请求、传递URL参数、定制headers
Jan 25 Python
python实现扫雷游戏
Mar 03 Python
selenium+python配置chrome浏览器的选项的实现
Mar 18 Python
python Tornado框架的使用示例
Oct 19 Python
python 多进程和协程配合使用写入数据
Oct 30 Python
python 动态渲染 mysql 配置文件的示例
Nov 20 Python
Python 居然可以在 Excel 中画画你知道吗
Feb 15 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
关于js与php互相传值的介绍
2013/06/25 PHP
PHP中对各种加密算法、Hash算法的速度测试对比代码
2014/07/08 PHP
纯php生成随机密码
2015/10/30 PHP
自制PHP框架之路由与控制器
2017/05/07 PHP
php+iframe 实现上传文件功能示例
2020/03/04 PHP
this[] 指的是什么内容 讨论
2007/03/24 Javascript
JS复制到剪贴板示例代码
2013/10/30 Javascript
js图片向右一张张滚动效果实例代码
2013/11/23 Javascript
javascript写的异步加载js文件函数(支持数组传参)
2014/06/07 Javascript
jQuery实现的简洁下拉菜单导航效果代码
2015/08/26 Javascript
Clipboard.js 无需Flash的JavaScript复制粘贴库
2015/10/02 Javascript
每天一篇javascript学习小结(Boolean对象)
2015/11/12 Javascript
JavaScript小技巧整理
2015/12/30 Javascript
Javascript+CSS3实现进度条效果
2016/10/28 Javascript
AngularJS实现单一页面内设置跳转路由的方法
2017/06/28 Javascript
JS实现将链接生成二维码并转为图片的方法
2018/03/17 Javascript
vue实现局部刷新的实现示例
2019/04/16 Javascript
Vue组件间的通信pubsub-js实现步骤解析
2020/03/11 Javascript
vue keep-alive的简单总结
2021/01/25 Vue.js
[55:04]海涛DOTA2死魂复燃6.82版本介绍
2014/09/28 DOTA
实例讲解Python中SocketServer模块处理网络请求的用法
2016/06/28 Python
python中字符串类型json操作的注意事项
2017/05/02 Python
Django视图之ORM数据库查询操作API的实例
2017/10/27 Python
利用Python实现在同一网络中的本地文件共享方法
2018/06/04 Python
python编程使用协程并发的优缺点
2018/09/20 Python
浅谈django的render函数的参数问题
2018/10/16 Python
python图像处理入门(一)
2019/04/04 Python
Python基于WordCloud制作词云图
2019/11/29 Python
基于CSS3特效之动画:animation的应用
2013/05/09 HTML / CSS
安全教育心得体会
2013/12/29 职场文书
社区十八大感言
2014/01/19 职场文书
社区端午节活动方案
2014/01/28 职场文书
校园环保建议书
2014/05/14 职场文书
人身意外保险授权委托书
2014/10/01 职场文书
2014年超市员工工作总结
2014/11/18 职场文书
我的长征观后感
2015/06/09 职场文书