对于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的汉字转GBK码实现代码
Feb 19 Python
python开发之for循环操作实例详解
Nov 12 Python
Python如何实现MySQL实例初始化详解
Nov 06 Python
python Matplotlib画图之调整字体大小的示例
Nov 20 Python
tensorflow学习教程之文本分类详析
Aug 07 Python
浅谈Python 多进程默认不能共享全局变量的问题
Jan 11 Python
使用Python代码实现Linux中的ls遍历目录命令的实例代码
Sep 07 Python
python中property和setter装饰器用法
Dec 19 Python
django 数据库返回queryset实现封装为字典
May 19 Python
Python爬虫实现百度翻译功能过程详解
May 29 Python
如何在windows下安装配置python工具Ulipad
Oct 27 Python
用Python提取PDF表格的方法
Apr 11 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
PHP网页游戏学习之Xnova(ogame)源码解读(十二)
2014/06/25 PHP
PHP+FFMPEG实现将视频自动转码成H264标准Mp4文件
2014/09/24 PHP
PHP实用函数分享之去除多余的0
2015/02/06 PHP
PHP pthreads v3下worker和pool的使用方法示例
2020/02/21 PHP
jQuery为iframe的body添加click事件的实现代码
2011/04/07 Javascript
jQuery UI Dialog 创建友好的弹出对话框实现代码
2012/04/12 Javascript
DWZ table的原生分页浅谈
2013/03/01 Javascript
JS下拉缓冲菜单示例代码
2013/08/30 Javascript
编写js扩展方法判断一个数组中是否包含某个元素
2013/11/08 Javascript
jquery检测input checked 控件是否被选中的方法
2014/03/26 Javascript
jquery中的常用事件bind、hover、toggle等示例介绍
2014/07/21 Javascript
jQuery EasyUI提交表单验证
2016/07/19 Javascript
详解jQuery lazyload 懒加载
2016/12/19 Javascript
Angular 2父子组件数据传递之@Input和@Output详解 (上)
2017/07/05 Javascript
详解webpack+express多页站点开发
2017/12/22 Javascript
js实现点击按钮复制文本功能
2020/07/20 Javascript
vue-cli的工程模板与构建工具详解
2018/09/27 Javascript
在Bootstrap开发框架中使用dataTable直接录入表格行数据的方法
2018/10/25 Javascript
微信小程序开发实现的IP地址查询功能示例
2019/03/28 Javascript
vue实现滑动到底部加载更多效果
2020/10/27 Javascript
这15个Vue指令,让你的项目开发爽到爆
2019/10/11 Javascript
[55:45]LGD vs OG 2019国际邀请赛淘汰赛 胜者组 BO3 第三场 8.24
2019/09/10 DOTA
Python基于WordCloud制作词云图
2019/11/29 Python
Python3交互式shell ipython3安装及使用详解
2020/07/11 Python
django models里数据表插入数据id自增操作
2020/07/15 Python
美国折扣宠物药房:Total Pet Supply
2018/05/27 全球购物
.NET面试10题
2014/02/24 面试题
办理退休介绍信
2014/01/09 职场文书
乡镇纠风工作实施方案
2014/03/22 职场文书
爱之链教学反思
2014/04/30 职场文书
师德师风演讲稿
2014/05/05 职场文书
创先争优演讲稿
2014/09/15 职场文书
繁星春水读书笔记
2015/06/30 职场文书
2016年习总书记讲话学习心得体会
2016/01/20 职场文书
《岳阳楼记》原文、译文赏析
2019/09/10 职场文书
Java实现给Word文件添加文字水印
2022/02/15 Java/Android