举例区分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简单日志处理类分享
Feb 14 Python
Python实现拷贝多个文件到同一目录的方法
Sep 19 Python
Python 3.x 连接数据库示例(pymysql 方式)
Jan 19 Python
windows系统下Python环境搭建教程
Mar 28 Python
python安装numpy&安装matplotlib& scipy的教程
Nov 02 Python
Python多线程爬虫实战_爬取糗事百科段子的实例
Dec 15 Python
Python查看微信撤回消息代码
Jun 07 Python
python3中property使用方法详解
Apr 23 Python
用python建立两个Y轴的XY曲线图方法
Jul 08 Python
Python 异步协程函数原理及实例详解
Nov 13 Python
python实现画图工具
Aug 27 Python
python定义具名元组实例操作
Feb 28 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
解决163/sohu/sina不能够收到PHP MAIL函数发出邮件的问题
2009/03/13 PHP
ThinkPHP实现更新数据实例详解(demo)
2016/06/29 PHP
jQuery 剧场版 你必须知道的javascript
2009/05/27 Javascript
jQuery不间断滚动效果(模拟百度新闻支持文字/图片/垂直滚动)
2013/02/05 Javascript
js 采用delete实现继承示例代码
2014/05/20 Javascript
JavaScript中的单引号和双引号报错的解决方法
2014/09/01 Javascript
微信小程序 两种为对象属性赋值的方式详解
2017/02/23 Javascript
jQuery插件Echarts实现的渐变色柱状图
2017/03/23 jQuery
原生javascript上传图片带进度条【实例分享】
2017/04/06 Javascript
基于bootstrap实现多个下拉框同时搜索功能
2017/07/19 Javascript
Nodejs 和Session 原理及实战技巧小结
2017/08/25 NodeJs
Nodejs连接mysql并实现增、删、改、查操作的方法详解
2018/01/04 NodeJs
Vue 实时监听窗口变化 windowresize的两种方法
2018/11/06 Javascript
详解vuex数据传输的两种方式及this.$store undefined的解决办法
2019/08/26 Javascript
JS数组的高级使用方法示例小结
2020/03/14 Javascript
Vue2.0 $set()的正确使用详解
2020/07/28 Javascript
用Python进行基础的函数式编程的教程
2015/03/31 Python
python中split方法用法分析
2015/04/17 Python
Python算法应用实战之栈详解
2017/02/04 Python
Python编程实战之Oracle数据库操作示例
2017/06/21 Python
Python读csv文件去掉一列后再写入新的文件实例
2017/12/28 Python
Python数据分析之双色球基于线性回归算法预测下期中奖结果示例
2018/02/08 Python
python框架flask表单实现详解
2019/11/04 Python
Python列表list操作相关知识小结
2020/01/29 Python
css3的过滤效果简单实例
2016/08/03 HTML / CSS
使用layui框架实现点击左侧导航切换右侧内容且右侧选项卡跟随变化的效果
2020/11/10 HTML / CSS
Kidsroom台湾:来自德国的婴儿用品
2017/12/11 全球购物
工作中个人的自我评价
2013/12/31 职场文书
工作室成员个人发展规划范文
2014/01/24 职场文书
篮球比赛口号
2014/06/10 职场文书
后进基层党组织整改方案
2014/10/25 职场文书
车间安全生产管理制度
2015/08/06 职场文书
解决Nginx 配置 proxy_pass 后 返回404问题
2021/03/31 Servers
python Tkinter的简单入门教程
2021/04/11 Python
MySQL系列之十三 MySQL的复制
2021/07/02 MySQL
GO语言字符串处理函数之处理Strings包
2022/04/14 Golang