python深copy和浅copy区别对比解析


Posted in Python onDecember 26, 2019

这篇文章主要介绍了python深copy和浅copy区别对比解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

首先先看一段代码

import copy
 
a = [1, 2, 3, [4]]
b = a
c = a.copy()
d = copy.deepcopy(a)
e = copy.copy(a)
a.append(4)
a[3].append(5)
print('a值为 {} 地址为 {}'.format(a, id(a)))
print('b值为 {} 地址为 {}'.format(b, id(b)))
print('c值为 {}  地址为 {}'.format(c, id(c)))
print('d值为 {}    地址为 {}'.format(d, id(d)))
print('e值为 {}  地址为 {}'.format(e, id(e)))

执行结果:

a值为 [1, 2, 3, [4, 5], 4] 地址为 4555940360
b值为 [1, 2, 3, [4, 5], 4] 地址为 4555940360
c值为 [1, 2, 3, [4, 5]]  地址为 4555873544
d值为 [1, 2, 3, [4]]    地址为 4556227912
e值为 [1, 2, 3, [4, 5]]  地址为 4556227464

从结果中可以看出来:

b赋值的为a的内存地址,值会随着a的变化而变化---直接赋值,对象引用

c=a.copy()使用的为python自带的copy方法,从结果中可看出复制后c的地址与a的地址不一致,也就是c将a的值完全复制包括地址,其结果就是c的值不会随着a的值变化而变化---深copy,完全拷贝了父对象及其子对象

d和e使用的是python自带的copy模块中的copy方法和deepcopy方法:

其中d的值地址和a不一致,值也不会随着a的变化而变化---深copy,完全拷贝了父对象及其子对象

其中e中父级内容不随着a的变化而变化,但e中子list中内容会随着a的变化而变化---浅copy,拷贝父对象,不会拷贝对象的内部的子对象

print('a子对象值为 {} 地址为 {}'.format(a[3], id(a[3])))
print('e子对象值为 {} 地址为 {}'.format(a[3], id(a[3])))
结果:
a子对象值为 [4, 5] 地址为 4334486344
e子对象值为 [4, 5] 地址为 4334486344

由上可得出,python中的copy分为三种:

1、直接复制:也就是对象引用

2、浅拷贝:拷贝父对象,不会拷贝对象的内部的子对象。

3、深拷贝:完全拷贝了父对象及其子对象

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
简明 Python 基础学习教程
Feb 08 Python
Python实现微信公众平台自定义菜单实例
Mar 20 Python
python类继承与子类实例初始化用法分析
Apr 17 Python
使用Python的Flask框架来搭建第一个Web应用程序
Jun 04 Python
Django接受前端数据的几种方法总结
Nov 04 Python
python os.path模块常用方法实例详解
Sep 16 Python
Python 获取ftp服务器文件时间的方法
Jul 02 Python
为什么说Python可以实现所有的算法
Oct 04 Python
Pandas聚合运算和分组运算的实现示例
Oct 17 Python
Python+OpenCV 实现图片无损旋转90°且无黑边
Dec 12 Python
Python线程条件变量Condition原理解析
Jan 20 Python
Python Tornado实现WEB服务器Socket服务器共存并实现交互的方法
May 26 Python
详解python opencv、scikit-image和PIL图像处理库比较
Dec 26 #Python
torch 中各种图像格式转换的实现方法
Dec 26 #Python
python两个_多个字典合并相加的实例代码
Dec 26 #Python
Python时间差中seconds和total_seconds的区别详解
Dec 26 #Python
python requests模拟登陆github的实现方法
Dec 26 #Python
python 实现按对象传值
Dec 26 #Python
Python函数的返回值、匿名函数lambda、filter函数、map函数、reduce函数用法实例分析
Dec 26 #Python
You might like
PHP 数字左侧自动补0
2008/03/31 PHP
PHP 一个随机字符串生成代码
2010/05/26 PHP
php中用socket模拟http中post或者get提交数据的示例代码
2013/08/08 PHP
PHP实现限制IP访问及提交次数的方法详解
2017/07/17 PHP
Laravel 5.2 文档 数据库 ―― 起步介绍
2019/10/21 PHP
分享JavaScript获取网页关闭与取消关闭的事件
2013/12/13 Javascript
javascript实现拖放效果
2015/12/16 Javascript
jQuery插件实现图片轮播特效
2016/06/16 Javascript
详解node如何让一个端口同时支持https与http
2017/07/04 Javascript
jQuery实现获取form表单内容及绑定数据到form表单操作分析
2018/07/03 jQuery
jQuery实现导航样式布局操作示例【可自定义样式布局】
2018/07/24 jQuery
vue resource发送请求的几种方式
2019/09/30 Javascript
vue使用exif获取图片旋转,压缩的示例代码
2020/12/11 Vue.js
如何在 Vue 中使用 JSX
2021/02/14 Vue.js
python使用webbrowser浏览指定url的方法
2015/04/04 Python
在windows系统中实现python3安装lxml
2016/03/23 Python
Python学习小技巧之列表项的拼接
2017/05/20 Python
django基础之数据库操作方法(详解)
2017/05/24 Python
Python unittest模块用法实例分析
2018/05/25 Python
pandas通过索引进行排序的示例
2018/11/16 Python
PyCharm鼠标右键不显示Run unittest的解决方法
2018/11/30 Python
Python 元组操作总结
2019/09/18 Python
Pytorch GPU显存充足却显示out of memory的解决方式
2020/01/13 Python
Python 改变数组类型为uint8的实现
2020/04/09 Python
Numpy一维线性插值函数的用法
2020/04/22 Python
基于Python的自媒体小助手---登录页面的实现代码
2020/06/29 Python
用React加CSS3实现微信拆红包动画效果
2017/03/13 HTML / CSS
茵宝(Umbro)英国官方商店:英国足球服装生产商
2016/12/29 全球购物
上课迟到检讨书100字
2014/01/11 职场文书
摄影专业毕业生求职信
2014/03/13 职场文书
银行贷款收入证明
2014/10/17 职场文书
交通安全温馨提示语
2015/07/14 职场文书
行政后勤人员工作计划应该怎么写?
2019/08/16 职场文书
2019年销售部季度工作计划3篇
2019/10/09 职场文书
导游词之无锡唐城
2019/12/12 职场文书
制作能在nginx和IIS中使用的ssl证书
2021/06/21 Servers