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 11 Python
python映射列表实例分析
Jan 26 Python
Python脚本实现网卡流量监控
Feb 14 Python
python提取图像的名字*.jpg到txt文本的方法
May 10 Python
python脚本监控Tomcat服务器的方法
Jul 06 Python
解决tensorflow测试模型时NotFoundError错误的问题
Jul 27 Python
Python对象与引用的介绍
Jan 24 Python
python 利用文件锁单例执行脚本的方法
Feb 19 Python
Python PO设计模式的具体使用
Aug 16 Python
对Python获取屏幕截图的4种方法详解
Aug 27 Python
Python +Selenium解决图片验证码登录或注册问题(推荐)
Feb 09 Python
python实现图片素描效果
Sep 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基础知识介绍
2013/09/17 PHP
Laravel 的数据库迁移的方法
2017/07/31 PHP
自定义jQuery选项卡插件实例
2013/03/27 Javascript
JavaScript实现数组随机排序的方法
2015/06/26 Javascript
js jquery获取当前元素的兄弟级 上一个 下一个元素
2015/09/01 Javascript
Jquery中巧用Ajax的beforeSend方法
2016/01/20 Javascript
AngularJS表单提交实例详解
2017/02/18 Javascript
详解webpack 配合babel 将es6转成es5 超简单实例
2017/05/02 Javascript
JS滚动到指定位置导航栏固定顶部
2017/07/03 Javascript
基于javaScript的this指向总结
2017/07/22 Javascript
使用JS动态显示文本
2017/09/09 Javascript
详谈commonjs模块与es6模块的区别
2017/10/18 Javascript
详解vuex结合localstorage动态监听storage的变化
2018/05/03 Javascript
解决vue2.0 element-ui中el-upload的before-upload方法返回false时submit()不生效问题
2018/08/24 Javascript
js canvas画布实现高斯模糊效果
2018/11/27 Javascript
vue-cli3+ts+webpack实现多入口多出口功能
2019/05/30 Javascript
解决layer.open弹出框不能获取input框的值为空的问题
2019/09/10 Javascript
Vue单文件组件开发实现过程详解
2020/07/30 Javascript
JavaScript实现音乐导航效果
2020/11/19 Javascript
vue使用vue-quill-editor富文本编辑器且将图片上传到服务器的功能
2021/01/13 Vue.js
[01:13]DOTA2群星解读国服召集令 一起说出回归的理由
2013/07/17 DOTA
[01:20:05]DOTA2-DPC中国联赛 正赛 Ehome vs VG BO3 第二场 2月5日
2021/03/11 DOTA
urllib2自定义opener详解
2014/02/07 Python
matplotlib绘图实例演示标记路径
2018/01/23 Python
用Python将mysql数据导出成json的方法
2018/08/21 Python
在Python中Dataframe通过print输出多行时显示省略号的实例
2018/12/22 Python
python将print输出的信息保留到日志文件中
2019/09/27 Python
Python callable内置函数原理解析
2020/03/05 Python
详解python logging日志传输
2020/07/01 Python
马来西亚网上美容店:Hermo.my
2017/11/25 全球购物
电气工程及其自动化专业求职信
2014/06/23 职场文书
测绘工程专业求职信
2014/07/15 职场文书
歌颂党的演讲稿
2014/09/10 职场文书
通知范文怎么写
2015/04/16 职场文书
2019年度政务公开考核工作总结模板
2019/11/11 职场文书
AJAX学习笔记
2021/05/18 Javascript