举例区分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 相关文章推荐
SQLite3中文编码 Python的实现
Jan 11 Python
简单谈谈Python中的json与pickle
Jul 19 Python
初学python的操作难点总结(新手必看篇)
Aug 03 Python
Python3连接SQLServer、Oracle、MySql的方法
Jun 28 Python
pandas 将list切分后存入DataFrame中的实例
Jul 03 Python
pycharm 取消默认的右击运行unittest的方法
Nov 29 Python
Python基于scipy实现信号滤波功能
May 08 Python
Django基础三之视图函数的使用方法
Jul 18 Python
浅谈django2.0 ForeignKey参数的变化
Aug 06 Python
Python如何把十进制数转换成ip地址
May 25 Python
Python logging日志库空间不足问题解决
Sep 14 Python
Pytorch实现图像识别之数字识别(附详细注释)
May 11 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
用文本作数据处理
2006/10/09 PHP
Eclipse中php插件安装及Xdebug配置的使用详解
2013/04/25 PHP
30个php操作redis常用方法代码例子
2014/07/05 PHP
thinkphp中ajax与php响应过程详解
2014/12/08 PHP
php实现数字补零的方法总结
2018/09/12 PHP
PHP设计模式之观察者模式定义与用法分析
2019/04/04 PHP
判断目标是否是window,document,和拥有tagName的Element的代码
2010/05/31 Javascript
javascript 隔行换色函数代码
2010/10/24 Javascript
在jquery boxy中添加百度地图坐标拾取注意流程
2014/04/03 Javascript
jquery实现二级导航下拉菜单效果
2015/12/18 Javascript
Node.js插件安装图文教程
2016/05/06 Javascript
数组Array的排序sort方法
2017/02/17 Javascript
AngularJS实用基础知识_入门必备篇(推荐)
2017/07/10 Javascript
单页面vue引入百度统计的使用方法示例详解
2018/10/13 Javascript
利用jqgrid实现上移下移单元格功能
2018/11/07 Javascript
Node.js API详解之 dns模块用法实例分析
2020/05/15 Javascript
js实现3D旋转相册
2020/08/02 Javascript
爬山算法简介和Python实现实例
2014/04/26 Python
浅谈插入排序算法在Python程序中的实现及简单改进
2016/05/04 Python
Python中线程的MQ消息队列实现以及消息队列的优点解析
2016/06/29 Python
Python 使用指定的网卡发送HTTP请求的实例
2019/08/21 Python
python rsa实现数据加密和解密、签名加密和验签功能
2019/09/18 Python
Python实现AI自动抠图实例解析
2020/03/05 Python
CSS3中几个新增加的盒模型属性使用教程
2016/03/01 HTML / CSS
详解HTML5中的picture元素响应式处理图片
2018/01/03 HTML / CSS
Kate Spade美国官网:纽约新兴时尚品牌,以包包闻名于世
2017/11/09 全球购物
Office DEPOT法国官网:欧迪办公用品采购
2018/01/03 全球购物
Uber Eats台湾:寻找附近提供送餐服务的餐厅
2018/05/07 全球购物
Piercing Pagoda官网:耳环、戒指、项链、手链等
2020/09/28 全球购物
人力资源经理的岗位职责范本
2014/02/28 职场文书
小班幼儿评语大全
2014/04/30 职场文书
优秀大学生事迹材料
2014/12/24 职场文书
2015年实习单位评语
2015/03/25 职场文书
运动会通讯稿600字
2015/07/20 职场文书
解决Mysql报错 Table 'mysql.user' doesn't exist
2022/05/06 MySQL
服务器SVN搭建图文安装过程
2022/06/21 Servers