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简单文本处理的方法
Jul 10 Python
python编程实现希尔排序
Apr 13 Python
浅述python中深浅拷贝原理
Sep 18 Python
tensorflow 重置/清除计算图的实现
Jan 19 Python
手把手教你进行Python虚拟环境配置教程
Feb 03 Python
Pycharm中切换pytorch的环境和配置的教程详解
Mar 13 Python
Python matplotlib绘制图形实例(包括点,曲线,注释和箭头)
Apr 17 Python
Pytorch转keras的有效方法,以FlowNet为例讲解
May 26 Python
如何解决安装python3.6.1失败
Jul 01 Python
一篇文章教你用python画动态爱心表白
Nov 22 Python
python中time.ctime()实例用法
Feb 03 Python
pytorch中的 .view()函数的用法介绍
Mar 17 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
第十三节 对象串行化 [13]
2006/10/09 PHP
PHP人民币金额数字转中文大写的函数代码
2013/02/27 PHP
php获取字符串中各个字符出现次数的方法
2015/02/23 PHP
php实现的操作excel类详解
2016/01/15 PHP
php实现在新浪云中使用imagick生成缩略图并上传的方法
2016/09/26 PHP
详解PHP多个进程配合redis的有序集合实现大文件去重
2019/03/06 PHP
Uglifyjs(JS代码优化工具)入门 安装使用
2020/04/13 Javascript
firefox下jQuery UI Autocomplete 1.8.*中文输入修正方法
2012/09/19 Javascript
详解JavaScript中undefined与null的区别
2014/03/29 Javascript
详解JavaScript中Date.UTC()方法的使用
2015/06/12 Javascript
vue 2.0封装model组件的方法
2017/08/03 Javascript
基于node下的http小爬虫的示例代码
2018/01/11 Javascript
JavaScript复制变量三种方法实例详解
2020/01/09 Javascript
JS实现表单中点击小眼睛显示隐藏密码框中的密码
2020/04/13 Javascript
JavaScript ECMA-262-3 深入解析(二):变量对象实例详解
2020/04/25 Javascript
Vue实现购物车基本功能
2020/11/08 Javascript
Python使用django获取用户IP地址的方法
2015/05/11 Python
解析Python中的__getitem__专有方法
2016/06/27 Python
python 打印出所有的对象/模块的属性(实例代码)
2016/09/11 Python
Python中字符串格式化str.format的详细介绍
2017/02/17 Python
利用python解决mysql视图导入导出依赖的问题
2017/12/17 Python
对numpy中array和asarray的区别详解
2018/04/17 Python
python3爬虫学习之数据存储txt的案例详解
2019/04/24 Python
python 计算数据偏差和峰度的方法
2019/06/29 Python
对python中url参数编码与解码的实例详解
2019/07/25 Python
Python tkinter布局与按钮间距设置方式
2020/03/04 Python
Python读取pdf表格写入excel的方法
2021/01/22 Python
基于CSS3特效之动画:animation的应用
2013/05/09 HTML / CSS
Russell Stover巧克力官方网站:美国领先的精美巧克力制造商
2016/11/27 全球购物
局域网标准
2016/09/10 面试题
事业单位请假制度
2014/01/13 职场文书
德语专业求职信
2014/03/12 职场文书
打造高效课堂实施方案
2014/03/22 职场文书
卖房协议书
2014/04/11 职场文书
美化环境标语
2014/06/20 职场文书
python 自动化偷懒的四个实用操作
2021/04/11 Python