详解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函数参数类型*、**的区别
Apr 11 Python
简介Python的collections模块中defaultdict类型的用法
Jul 07 Python
Python使用pymysql小技巧
Jun 04 Python
python实现微信小程序自动回复
Sep 10 Python
Django时区详解
Jul 24 Python
Python 通过微信控制实现app定位发送到个人服务器再转发微信服务器接收位置信息
Aug 05 Python
Python 仅获取响应头, 不获取实体的实例
Aug 21 Python
Python使用贪婪算法解决问题
Oct 22 Python
python爬虫实现POST request payload形式的请求
Apr 30 Python
python对 MySQL 数据库进行增删改查的脚本
Oct 22 Python
selenium设置浏览器为headless无头模式(Chrome和Firefox)
Jan 08 Python
将Python代码打包成.exe可执行文件的完整步骤
May 12 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
我的论坛源代码(八)
2006/10/09 PHP
用php获取远程图片并把它保存到本地的代码
2008/04/07 PHP
php截取中文字符串不乱码的方法
2013/12/25 PHP
PHP常量使用的几个需要注意的地方(谨慎使用PHP中的常量)
2014/09/12 PHP
PHP-CGI远程代码执行漏洞分析与防范
2017/05/07 PHP
PHP 实现浏览记录并按日期分组
2017/05/11 PHP
解决php-fpm.service not found问题的办法
2017/06/06 PHP
ASP.NET jQuery 实例14 在ASP.NET form中校验时间范围
2012/02/03 Javascript
做好七件事帮你提升jQuery的性能
2014/02/06 Javascript
JS中三目运算符和if else的区别分析与示例
2014/11/21 Javascript
js实现浏览器窗口大小被改变时触发事件的方法
2015/02/02 Javascript
深入理解JavaScript系列(38):设计模式之职责链模式详解
2015/03/04 Javascript
jquery滚动特效集锦
2015/06/03 Javascript
浅析四种常见的Javascript声明循环变量的书写方式
2015/10/14 Javascript
MVC+jQuery.Ajax异步实现增删改查和分页
2020/12/22 Javascript
原生js实现弹出层登录拖拽功能
2016/12/05 Javascript
js仿京东轮播效果 选项卡套选项卡使用
2017/01/12 Javascript
AngularJS 实现点击按钮获取验证码功能实例代码
2017/07/13 Javascript
详解CommonJS和ES6模块循环加载处理的区别
2018/12/26 Javascript
微信小程序 确认框的实现(附代码)
2019/07/23 Javascript
Node.js系列之安装配置与基本使用(1)
2019/08/30 Javascript
JS数组进阶示例【数组的几种函数用法】
2020/01/16 Javascript
解决python3捕获cx_oracle抛出的异常错误问题
2018/10/18 Python
基于多进程中APScheduler重复运行的解决方法
2019/07/22 Python
解决Django中checkbox复选框的传值问题
2020/03/31 Python
python实现发送QQ邮件(可加附件)
2020/12/23 Python
html5的canvas方法使用指南
2014/12/15 HTML / CSS
HTML5 Canvas入门学习教程
2016/03/17 HTML / CSS
Html5 webRTC简单实现视频调用的示例代码
2020/09/23 HTML / CSS
函授毕业个人自我评价
2014/02/20 职场文书
法人委托书范本
2014/04/04 职场文书
财务人员担保书
2014/05/13 职场文书
校园活动策划方案
2014/06/13 职场文书
2015年财务人员工作总结
2015/04/10 职场文书
幼儿园六一儿童节主持词
2015/06/30 职场文书
JavaScript原型链详解
2021/11/07 Javascript