举例区分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 socket网络编程步骤详解(socket套接字使用)
Dec 06 Python
python中迭代器(iterator)用法实例分析
Apr 29 Python
Python中的sort()方法使用基础教程
Jan 08 Python
python利用正则表达式搜索单词示例代码
Sep 24 Python
Sanic框架流式传输操作示例
Jul 18 Python
pycharm+PyQt5+python最新开发环境配置(踩坑)
Feb 11 Python
python如何实现从视频中提取每秒图片
Oct 22 Python
Python 在OpenCV里实现仿射变换—坐标变换效果
Aug 30 Python
Python如何访问字符串中的值
Feb 09 Python
使用python+poco+夜神模拟器进行自动化测试实例
Apr 23 Python
python 监控服务器是否有人远程登录(详细思路+代码)
Dec 18 Python
Pytorch中的数据集划分&正则化方法
May 27 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中uploaded_files函数使用方法详解
2011/03/09 PHP
10条PHP高级技巧[修正版]
2011/08/02 PHP
php截取中文字符串函数实例
2015/02/23 PHP
PHP实现的简单缓存类
2015/07/29 PHP
PHP中header函数的用法及其注意事项详解
2016/06/13 PHP
浅谈使用 Yii2 AssetBundle 中 $publishOptions 的正确姿势
2017/11/08 PHP
jQuery select的操作实现代码
2009/05/06 Javascript
FireFox JavaScript全局Event对象
2009/06/14 Javascript
HTML node相关的一些资料整理
2010/01/01 Javascript
老鱼 浅谈javascript面向对象编程
2010/03/04 Javascript
javascript使用定时函数实现跳转到某个页面
2013/12/25 Javascript
Jquery实现select multiple左右添加和删除功能的简单实例
2016/05/26 Javascript
AngularJS学习笔记(三)数据双向绑定的简单实例
2016/11/08 Javascript
JS实现自动阅读单词(有道单词本添加功能)
2016/11/14 Javascript
使用base64对图片的二进制进行编码并用ajax进行显示
2017/01/03 Javascript
vue项目中jsonp跨域获取qq音乐首页推荐问题
2018/05/30 Javascript
基于Koa2写个脚手架模拟接口服务的方法
2018/11/27 Javascript
Python中防止sql注入的方法详解
2017/02/25 Python
python中从str中提取元素到list以及将list转换为str的方法
2018/06/26 Python
python的一些加密方法及python 加密模块
2019/07/11 Python
python pygame实现滚动横版射击游戏城市之战
2019/11/25 Python
python各层级目录下import方法代码实例
2020/01/20 Python
Python yield的用法实例分析
2020/03/06 Python
PyCharm中配置PySide2的图文教程
2020/06/18 Python
tensorflow之读取jpg图像长和宽实例
2020/06/18 Python
通俗讲解python 装饰器
2020/09/07 Python
中国旅游网站:同程旅游
2016/09/11 全球购物
extern在函数声明中是什么意思
2014/01/19 面试题
请说出这段代码执行后a和b的值分别是多少
2015/03/28 面试题
财务出纳员岗位职责
2013/11/26 职场文书
yy结婚证婚词
2014/01/10 职场文书
校园环保标语
2014/06/13 职场文书
体育专业大学生职业生涯规划范文:打造自己的运动帝国
2014/09/12 职场文书
融资合作协议书范本
2014/10/17 职场文书
长江三峡导游词
2015/01/31 职场文书
大学生个人总结范文
2015/02/15 职场文书