对于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性能优化的20条建议
Oct 25 Python
python装饰器decorator介绍
Nov 21 Python
Python中实现的RC4算法
Feb 14 Python
利用Python实现网络测试的脚本分享
May 26 Python
python使用pyqt写带界面工具的示例代码
Oct 23 Python
网红编程语言Python将纳入高考你怎么看?
Jun 07 Python
PyCharm 设置SciView工具窗口的方法
Jan 15 Python
python+selenium 鼠标事件操作方法
Aug 24 Python
Python搭建代理IP池实现检测IP的方法
Oct 27 Python
Python读取pdf表格写入excel的方法
Jan 22 Python
浅谈盘点5种基于Python生成的个性化语音方法
Feb 05 Python
Python使用scapy模块发包收包
May 07 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新手用的Insert和Update语句构造类
2012/03/31 PHP
注意:php5.4删除了session_unregister函数
2013/08/05 PHP
Php无限级栏目分类读取的实现代码
2014/02/19 PHP
Symfony2创建基于域名的路由相关示例
2016/11/14 PHP
简单谈谈PHP中的trait
2017/02/25 PHP
javascript firefox不显示本地预览图片问题的解决方法
2008/11/12 Javascript
Js操作树节点自动折叠展开的几种方法
2014/05/05 Javascript
javascript实现漂亮的拖动层,窗口拖拽特效
2015/04/24 Javascript
JS实现样式清新的横排下拉菜单效果
2015/10/09 Javascript
JavaScript+CSS实现仿Mootools竖排弹性动画菜单效果
2015/10/14 Javascript
基于JS实现的笛卡尔乘积之商品发布
2016/05/13 Javascript
Angular动态添加、删除输入框并计算值实例代码
2017/03/29 Javascript
详解Windows下安装Nodejs步骤
2017/05/18 NodeJs
VueAwesomeSwiper在VUE中的使用以及遇到的一些问题
2018/01/11 Javascript
PWA介绍及快速上手搭建一个PWA应用的方法
2019/01/27 Javascript
VUE 实现动态给对象增加属性,并触发视图更新操作示例
2019/11/29 Javascript
Angular 多模块项目构建过程
2020/02/13 Javascript
Vue左滑组件slider使用详解
2020/08/21 Javascript
[43:48]Ti4正赛第一天 VG vs NEWBEE 2
2014/07/19 DOTA
[55:03]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第二场 11.20
2020/11/20 DOTA
python k-近邻算法实例分享
2014/06/11 Python
浅析Python的web.py框架中url的设定方法
2016/07/11 Python
python中logging模块的一些简单用法的使用
2019/02/22 Python
如何安装并使用conda指令管理python环境
2019/07/10 Python
Python 共享变量加锁、释放详解
2019/08/28 Python
如何基于Python爬取隐秘的角落评论
2020/07/02 Python
Python selenium爬取微信公众号文章代码详解
2020/08/12 Python
HTML5的结构和语义(4):语义性的内联元素
2008/10/17 HTML / CSS
英国地毯卖家:The Rug Seller
2019/07/18 全球购物
中餐厅主管的职责范文
2014/02/04 职场文书
聘用意向书范本
2014/04/01 职场文书
售后服务承诺书模板
2014/05/21 职场文书
假面舞会策划方案
2014/05/29 职场文书
调研汇报材料范文
2014/08/17 职场文书
导游词之铁岭象牙山
2019/12/06 职场文书
mysql脏页是什么
2021/07/26 MySQL