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 获取文件列表(或是目录例表)
Mar 25 Python
在Pycharm中设置默认自动换行的方法
Jan 16 Python
解决在Python编辑器pycharm中程序run正常debug错误的问题
Jan 17 Python
Python实现的爬取百度贴吧图片功能完整示例
May 10 Python
Python列表操作方法详解
Feb 09 Python
python输出pdf文档的实例
Feb 13 Python
基于python3实现倒叙字符串
Feb 18 Python
Python numpy多维数组实现原理详解
Mar 10 Python
利用python对excel中一列的时间数据更改格式操作
Jul 14 Python
运行Python编写的程序方法实例
Oct 21 Python
pytorch训练神经网络爆内存的解决方案
May 22 Python
详解Python函数print用法
Jun 18 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中使用CURL伪造来路抓取页面或文件
2011/05/04 PHP
php检测url是否存在的方法
2015/04/14 PHP
php搜索文件程序分享
2015/10/30 PHP
PHP使用redis消息队列发布微博的方法示例
2017/06/22 PHP
tp框架(thinkPHP)实现三次登陆密码错误之后锁定账号功能示例
2018/05/24 PHP
Jquery中增加参数与Json转换代码
2009/11/20 Javascript
jQuery中contents()方法用法实例
2015/01/08 Javascript
Javascript中的匿名函数与封装介绍
2015/03/15 Javascript
对JavaScript的全文搜索实现相关度评分的功能的方法
2015/06/24 Javascript
jQuery获取DOM节点实例分析(2种方式)
2015/12/15 Javascript
js组件SlotMachine实现图片切换效果制作抽奖系统
2016/04/17 Javascript
jquery操作checkbox火狐下第二次无法勾选的解决方法
2016/10/10 Javascript
详解JavaScript中return的用法
2017/05/08 Javascript
node结合swig渲染摸板的方法
2018/04/11 Javascript
js getBoundingClientRect使用方法详解
2019/07/17 Javascript
在vue中获取wangeditor的html和text的操作
2020/10/23 Javascript
梳理一下vue中的生命周期
2020/12/30 Vue.js
[09:40]DAC2018 4.5 SOLO赛 MidOne vs Miracle
2018/04/06 DOTA
[46:28]EG vs Liquid 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.23
2019/09/05 DOTA
python插入数据到列表的方法
2015/04/30 Python
python使用KNN算法手写体识别
2018/02/01 Python
Flask之flask-session的具体使用
2018/07/26 Python
python消费kafka数据批量插入到es的方法
2018/12/27 Python
python 日期排序的实例代码
2019/07/11 Python
python3在同一行内输入n个数并用列表保存的例子
2019/07/20 Python
Flask框架实现的前端RSA加密与后端Python解密功能详解
2019/08/13 Python
python中利用numpy.array()实现俩个数值列表的对应相加方法
2019/08/26 Python
基于python实现微信好友数据分析(简单)
2020/02/16 Python
基于Python生成个性二维码过程详解
2020/03/05 Python
python语言的优势是什么
2020/06/17 Python
会计电算一体化个人简历的自我评价
2013/10/15 职场文书
农民工工资发放承诺书
2014/03/31 职场文书
美丽家庭事迹材料
2014/05/03 职场文书
医师定期考核实施方案
2014/05/07 职场文书
幼儿教师三分钟演讲稿
2019/06/21 职场文书
Android Flutter实现3D动画效果示例详解
2022/04/07 Java/Android