详解python深浅拷贝区别


Posted in Python onJune 24, 2019

在Python中对象的赋值其实就是对象的引用。当创建一个对象,把它赋值给另一个变量的时候,python并没有拷贝这个对象,只是拷贝了这个对象的引用而已。

浅拷贝:拷贝了最外围的对象本身,内部的元素都只是拷贝了一个引用而已。也就是,把对象复制一遍,但是该对象中引用的其他对象我不复制

深拷贝:外围和内部元素都进行了拷贝对象本身,而不是引用。也就是,把对象复制一遍,并且该对象中引用的其他对象我也复制。

深浅拷贝的作用

1,减少内存的使用

2,以后在做数据的清洗、修改或者入库的时候,对原数据进行复制一份,以防数据修改之后,找不到原数据。

浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象。

深拷贝(deepcopy): copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象。

>>>a = {1: [1,2,3]}>>> b = a.copy()>>> a, b({1: [1, 2, 3]}, {1: [1, 2, 3]})>>> a[1].append(4)>>> a, b({1: [1, 2, 3, 4]}, {1: [1, 2, 3, 4]})

深度拷贝需要引入 copy 模块:

>>>import copy>>> c = copy.deepcopy(a)>>> a, c({1: [1, 2, 3, 4]}, {1: [1, 2, 3, 4]})>>> a[1].append(5)>>> a, c({1: [1, 2, 3, 4, 5]}, {1: [1, 2, 3, 4]})

1、b = a.copy(): 浅拷贝, a 和 b 是一个独立的对象,但他们的子对象还是指向统一对象(是引用)。

详解python深浅拷贝区别

2、b = copy.deepcopy(a): 深度拷贝, a 和 b 完全拷贝了父对象及其子对象,两者是完全独立的。

详解python深浅拷贝区别

Python 相关文章推荐
python使用cPickle模块序列化实例
Sep 25 Python
python快速查找算法应用实例
Sep 26 Python
wxPython使用系统剪切板的方法
Jun 16 Python
Python编程中time模块的一些关键用法解析
Jan 19 Python
通过Python实现自动填写调查问卷
Sep 06 Python
Python实现将HTML转换成doc格式文件的方法示例
Nov 20 Python
django自带调试服务器的使用详解
Aug 29 Python
后端开发使用pycharm的技巧(推荐)
Mar 27 Python
python 安装impala包步骤
Mar 28 Python
如何以Winsows Service方式运行JupyterLab
Aug 30 Python
python实现简单的五子棋游戏
Sep 01 Python
解决Ubuntu18中的pycharm不能调用tensorflow-gpu的问题
Sep 17 Python
pandas计数 value_counts()的使用
Jun 24 #Python
pandas DataFrame 交集并集补集的实现
Jun 24 #Python
pandas dataframe的合并实现(append, merge, concat)
Jun 24 #Python
pandas.cut具体使用总结
Jun 24 #Python
使用pyinstaller打包PyQt4程序遇到的问题及解决方法
Jun 24 #Python
python日期相关操作实例小结
Jun 24 #Python
使用Python Pandas处理亿级数据的方法
Jun 24 #Python
You might like
php采集文章中的图片获取替换到本地(实现代码)
2013/07/08 PHP
javascript 清空form表单中某种元素的值
2009/12/26 Javascript
我的javascript 函数链之演变
2011/04/07 Javascript
jQuery控制输入框只能输入数值的小例子
2013/03/20 Javascript
可自定义速度的js图片无缝滚动示例分享
2014/01/20 Javascript
JsRender for object语法简介
2014/10/31 Javascript
js实现在网页上简单显示时间的方法
2015/03/02 Javascript
深入理解JavaScript系列(49):Function模式(上篇)
2015/03/04 Javascript
jQuery实现dialog设置focus焦点的方法
2015/06/10 Javascript
jQuery实现带有上下控制按钮的简单多行滚屏效果代码
2015/09/04 Javascript
javascript实现保留两位小数的多种方法
2015/12/18 Javascript
vue引入ueditor及node后台配置详解
2018/01/03 Javascript
vue中动态设置meta标签和title标签的方法
2018/07/11 Javascript
从vue源码看props的用法
2019/01/09 Javascript
vue实现几秒后跳转新页面代码
2020/09/09 Javascript
vue缓存之keep-alive的理解和应用详解
2020/11/02 Javascript
JavaScript实现鼠标移入随机变换颜色
2020/11/24 Javascript
[02:23]2018DOTA2亚洲邀请赛趣味视频——反应测试
2018/04/04 DOTA
python使用scrapy解析js示例
2014/01/23 Python
一行代码让 Python 的运行速度提高100倍
2018/10/08 Python
django celery redis使用具体实践
2019/04/08 Python
在django中使用apscheduler 执行计划任务的实现方法
2020/02/11 Python
美国受欢迎的女性牛仔裤品牌:DL1961
2016/11/12 全球购物
我有一个char * 型指针正巧指向一些int 型变量, 我想跳过它们。 为什么如下的代码((int *)p)++; 不行?
2013/05/09 面试题
如何开发一个JQuery插件
2016/07/28 面试题
小学语文课后反思精选
2014/04/25 职场文书
小学教师个人先进事迹材料
2014/05/17 职场文书
教师求职信范文
2014/05/24 职场文书
大学生党员自我剖析材料
2014/10/06 职场文书
居住证明范文
2015/06/17 职场文书
复活读书笔记
2015/06/29 职场文书
民间借贷纠纷起诉书
2015/08/03 职场文书
文艺部部长竞选稿
2015/11/21 职场文书
2016暑期校本培训心得体会
2016/01/08 职场文书
导游词之寿县报恩寺
2020/01/19 职场文书
详解python中[-1]、[:-1]、[::-1]、[n::-1]使用方法
2021/04/25 Python