举例区分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中Iterator迭代器的使用杂谈
Jun 20 Python
给你选择Python语言实现机器学习算法的三大理由
Nov 15 Python
Python+matplotlib+numpy实现在不同平面的二维条形图
Jan 02 Python
tensorflow1.0学习之模型的保存与恢复(Saver)
Apr 23 Python
浅谈python之新式类
Aug 12 Python
Python把对应格式的csv文件转换成字典类型存储脚本的方法
Feb 12 Python
Python 中的 global 标识对变量作用域的影响
Aug 12 Python
python实现的分析并统计nginx日志数据功能示例
Dec 21 Python
Django用户身份验证完成示例代码
Apr 03 Python
解决Python数据可视化中文部分显示方块问题
May 16 Python
Python实现疫情通定时自动填写功能(附代码)
May 27 Python
通过Python pyecharts输出保存图片代码实例
Nov 25 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
一个连接两个不同MYSQL数据库的PHP程序
2006/10/09 PHP
php在window iis的莫名问题的测试方法
2013/05/14 PHP
laravel migrate初学常见错误的解决方法
2017/10/11 PHP
用JavaScript编写COM组件的步骤
2009/03/17 Javascript
Jquery动态改变图片IMG的src地址示例
2013/06/25 Javascript
javascript读写XML实现广告轮换(兼容IE、FF)
2013/08/09 Javascript
js模拟C#中List的简单实例
2014/03/06 Javascript
JS实现控制表格单元格垂直对齐的方法
2015/03/30 Javascript
基于jQuery实现点击弹出层实例代码
2016/01/01 Javascript
JavaScript+html5 canvas绘制渐变区域完整实例
2016/01/26 Javascript
jQuery鼠标事件总结
2016/10/13 Javascript
浅析JavaScript中作用域和作用域链
2016/12/06 Javascript
JS库particles.js创建超炫背景粒子插件(附源码下载)
2017/09/13 Javascript
用js实现每隔一秒刷新时间的实例(含年月日时分秒)
2017/10/25 Javascript
使用veloticy-ui生成文字动画效果
2018/02/08 Javascript
微信小程序传值以及获取值方法的详解
2019/04/29 Javascript
通过vue写一个瀑布流插件代码实例
2019/09/07 Javascript
Vue 实现复制功能,不需要任何结构内容直接复制方式
2019/11/09 Javascript
VUE中setTimeout和setInterval自动销毁案例
2020/09/07 Javascript
Django1.3添加app提示模块不存在的解决方法
2014/08/26 Python
python检查字符串是否是正确ISBN的方法
2015/07/11 Python
windows下ipython的安装与使用详解
2016/10/20 Python
Python图像处理之颜色的定义与使用分析
2019/01/03 Python
python opencv minAreaRect 生成最小外接矩形的方法
2019/07/01 Python
keras Lambda自定义层实现数据的切片方式,Lambda传参数
2020/06/11 Python
使用python实现名片管理系统
2020/06/18 Python
Move Free官方海外旗舰店:美国骨关节健康专业品牌
2017/12/06 全球购物
Diamondback自行车:拥有你的冒险
2019/04/22 全球购物
Java面试题:为什么要用Java
2012/05/11 面试题
党员先进性教育整改措施
2014/09/18 职场文书
教师批评与自我批评发言稿
2014/10/15 职场文书
毕业典礼邀请函
2015/01/31 职场文书
上班迟到检讨书
2015/05/06 职场文书
大学学习委员竞选稿
2015/11/20 职场文书
Django实现翻页的示例代码
2021/05/24 Python
Centos系统通过Docker安装并搭建MongoDB数据库
2022/04/12 MongoDB