对于Python深浅拷贝的理解


Posted in Python onJuly 29, 2019

1,浅拷贝是什么?

浅拷贝是对于一个对象的顶层拷贝,通俗的理解是:拷贝了引用,并没有拷贝内容

对于Python深浅拷贝的理解

通过a=b这种方式赋值只是赋值的引用(内存地址),a和b都指向了同一个内存空间,所以他们的id(地址相同),这种就是浅拷贝

2,深拷贝是什么?

对于Python深浅拷贝的理解

通过调用copy包里的deepcopy方法来深拷贝,其实就是在内存区在分配保存了和a相同的数据,用c来指向它,和a的内存地址不同。怎么验证就是我说的这种情况的呢?用下图来说明吧:

对于Python深浅拷贝的理解

可以看出向a 添加一个元素,通过浅拷贝的b也随着改了,但是通过深拷贝的c没改,可以判断c和a指向不同的内存地址。

如果是类似这种结构的数据的深拷贝呢:

对于Python深浅拷贝的理解

深拷贝d时其实把a里面的a,b都深拷贝了一份,是递归式的深拷贝。

通过验证就是如图所示:

对于Python深浅拷贝的理解

3,浅拷贝对不可变类型和可变类型的copy不同

In [88]: a = [11,22,33]

In [89]: b = copy.copy(a)

In [90]: id(a)
Out[90]: 59275144

In [91]: id(b)
Out[91]: 59525600

In [92]: a.append(44)

In [93]: a
Out[93]: [11, 22, 33, 44]

In [94]: b
Out[94]: [11, 22, 33]

In [95]: a = (11,22,33)

In [96]: b = copy.copy(a)

In [97]: id(a)
Out[97]: 58890680

In [98]: id(b)
Out[98]: 58890680

在python中:数字,字符串,元组属于不可变类型,其他的属于可变类型。

>>> a=(1,2,3)
>>> a
(1, 2, 3)
>>> b=a
>>> id(b)
11543656
>>> id(a)
11543656
>>> import copy
>>> c
34564
>>> c=copy.deepcopy(a)
>>> c
(1, 2, 3)
>>> id(c)
11543656
>>> d=copy.copy(a)
>>> id(d)
11543656

可以看出对于可变类型使用copy方法是深拷贝,对于不可变类型,使用copy和deepcopy方法都是浅拷贝

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

Python 相关文章推荐
详解Python中表达式i += x与i = i + x是否等价
Feb 08 Python
详解Python中的四种队列
May 21 Python
python 读取目录下csv文件并绘制曲线v111的方法
Jul 06 Python
python 自动批量打开网页的示例
Feb 21 Python
对于Python深浅拷贝的理解
Jul 29 Python
正则给header的冒号两边参数添加单引号(Python请求用)
Aug 09 Python
基于pytorch的保存和加载模型参数的方法
Aug 17 Python
PyTorch的Optimizer训练工具的实现
Aug 18 Python
python 一篇文章搞懂装饰器所有用法(建议收藏)
Aug 23 Python
你应该知道的Python3.6、3.7、3.8新特性小结
May 12 Python
Python+OpenCV图像处理——图像二值化的实现
Oct 24 Python
使用Python解析Chrome浏览器书签的示例
Nov 13 Python
PyCharm中代码字体大小调整方法
Jul 29 #Python
python pandas cumsum求累计次数的用法
Jul 29 #Python
详解Python用三种方式统计词频的方法
Jul 29 #Python
Django框架视图层URL映射与反向解析实例分析
Jul 29 #Python
Django 重写用户模型的实现
Jul 29 #Python
python写程序统计词频的方法
Jul 29 #Python
Django外键(ForeignKey)操作以及related_name的作用详解
Jul 29 #Python
You might like
smarty中英文多编码字符截取乱码问题解决方法
2014/10/28 PHP
php操作(删除,提取,增加)zip文件方法详解
2015/03/12 PHP
php版微信公众平台回复中文出现乱码问题的解决方法
2016/09/22 PHP
基于jquery的商品展示放大镜
2010/08/07 Javascript
Prototype源码浅析 Number部分
2012/01/16 Javascript
JavaScript中的字符串操作详解
2013/11/12 Javascript
jQuery弹层插件jquery.fancybox.js用法实例
2016/01/22 Javascript
JavaScript代码性能优化总结(推荐)
2016/05/16 Javascript
jQuery电话号码验证实例
2017/01/05 Javascript
详解angularJs中自定义directive的数据交互
2017/01/13 Javascript
js学习总结_选项卡封装(实例讲解)
2017/07/13 Javascript
nodejs使用http模块发送get与post请求的方法示例
2018/01/08 NodeJs
JavaScript插入排序算法原理与实现方法示例
2018/08/06 Javascript
vue在自定义组件中使用v-model进行数据绑定的方法
2019/03/25 Javascript
Javascript ParentNode和ChildNode接口原理解析
2020/03/16 Javascript
Vue 实现一个简单的鼠标拖拽滚动效果插件
2020/12/10 Vue.js
好用的Python编辑器WingIDE的使用经验总结
2016/08/31 Python
简单学习Python多进程Multiprocessing
2017/08/29 Python
python如何爬取个性签名
2018/06/19 Python
python实现傅里叶级数展开的实现
2018/07/21 Python
python3实现名片管理系统
2020/11/29 Python
在python里协程使用同步锁Lock的实例
2019/02/19 Python
用python生成与调用cntk模型代码演示方法
2019/08/26 Python
sklearn-SVC实现与类参数详解
2019/12/10 Python
浅谈python中频繁的print到底能浪费多长时间
2020/02/21 Python
python数据分析工具之 matplotlib详解
2020/04/09 Python
python中pow函数用法及功能说明
2020/12/04 Python
html5构建触屏网站之touch事件介绍
2013/01/07 HTML / CSS
设计师珠宝:Ylang 23
2018/05/11 全球购物
巴西独家产品和现场演示购物网站:Shoptime
2019/07/11 全球购物
C#面试题问题集
2016/04/02 面试题
Linux中如何用命令创建目录
2016/12/02 面试题
小学生保护环境倡议书
2014/05/15 职场文书
汽车广告策划方案
2014/05/31 职场文书
2014审计局领导班子民主生活会对照检查材料思想汇报
2014/09/20 职场文书
单位员工收入证明样本
2014/10/09 职场文书