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多进程编程技术实例分析
Sep 16 Python
python中bisect模块用法实例
Sep 25 Python
在CentOS上配置Nginx+Gunicorn+Python+Flask环境的教程
Jun 07 Python
python 简单的绘图工具turtle使用详解
Jun 21 Python
Python排序搜索基本算法之插入排序实例分析
Dec 11 Python
Python并发编程协程(Coroutine)之Gevent详解
Dec 27 Python
python实现批量按比例缩放图片效果
Mar 30 Python
python写日志文件操作类与应用示例
Jul 01 Python
基于Python实现签到脚本过程解析
Oct 25 Python
浅谈python中统计计数的几种方法和Counter详解
Nov 07 Python
Python实现Excel自动分组合并单元格
Feb 22 Python
python之django路由和视图案例教程
Jul 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
smarty循环嵌套用法示例分析
2016/07/19 PHP
yii插入数据库防并发的简单代码
2017/05/27 PHP
再谈ie和firefox下的document.all属性
2009/10/21 Javascript
Iframe 自适应高度并实时监控高度变化的js代码
2009/10/30 Javascript
html+js实现动态显示本地时间
2013/09/21 Javascript
JS+CSS实现Div弹出窗口同时背景变暗的方法
2015/03/04 Javascript
DOM 高级编程
2015/05/06 Javascript
JS数组操作(数组增加、删除、翻转、转字符串、取索引、截取(切片)slice、剪接splice、数组合并)
2016/05/20 Javascript
js控制文本框只能输入中文、英文、数字与指定特殊符号的实现代码
2016/09/09 Javascript
JS去除字符串中空格的方法
2017/02/14 Javascript
JavaScript Base64 作为文件上传的实例代码解析
2017/02/14 Javascript
jQuery事件详解
2017/02/23 Javascript
vue 点击按钮实现动态挂载子组件的方法
2018/09/07 Javascript
jQuery模仿ToDoList实现简单的待办事项列表
2019/12/30 jQuery
解决微信小程序scroll-view组件无横向滚动的问题
2020/02/04 Javascript
基于redis的小程序登录实现方法流程分析
2020/05/25 Javascript
Python中使用支持向量机(SVM)算法
2017/12/26 Python
浅谈django的render函数的参数问题
2018/10/16 Python
python微信好友数据分析详解
2018/11/19 Python
Python玩转Excel的读写改实例
2019/02/22 Python
Python 获取指定文件夹下的目录和文件的实现
2019/08/30 Python
python flask搭建web应用教程
2019/11/19 Python
jupyter notebook 增加kernel教程
2020/04/10 Python
python中rc1什么意思
2020/06/19 Python
tensorflow基于CNN实战mnist手写识别(小白必看)
2020/07/20 Python
python实现计算图形面积
2021/02/22 Python
css3 伪类选择器快速复习小结
2019/09/10 HTML / CSS
HTML5新特性 多线程(Worker SharedWorker)
2017/04/24 HTML / CSS
Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型
2013/10/30 面试题
生物医学工程专业学生求职信范文分享
2013/12/14 职场文书
市三好学生主要事迹
2014/01/28 职场文书
酒店管理专业自荐信
2014/05/23 职场文书
爱心捐款感谢信
2015/01/20 职场文书
浅谈MySQL user权限表
2021/06/18 MySQL
图解排序算法之希尔排序Java实现
2021/06/26 Java/Android
详解Nginx的超时keeplive_timeout配置步骤
2022/05/25 Servers