对于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中的条件判断语句
May 14 Python
python3中str(字符串)的使用教程
Mar 23 Python
浅谈scrapy 的基本命令介绍
Jun 13 Python
使用Pyinstaller的最新踩坑实战记录
Nov 08 Python
python3第三方爬虫库BeautifulSoup4安装教程
Jun 19 Python
python+flask实现API的方法
Nov 21 Python
Windows下Python3.6安装第三方模块的方法
Nov 22 Python
Django uwsgi Nginx 的生产环境部署详解
Feb 02 Python
Django中的FBV和CBV用法详解
Sep 15 Python
python如何通过pyqt5实现进度条
Jan 20 Python
matplotlib部件之套索Lasso的使用
Feb 24 Python
python源文件的字符编码知识点详解
Mar 04 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 图像处理类1
2009/06/15 PHP
php学习笔记之 函数声明(二)
2011/06/09 PHP
php中关于codeigniter的xmlrpc的类在进行数据交换时的类型问题
2011/07/03 PHP
javascript 精粹笔记
2010/05/09 Javascript
jQuery1.6 类型判断实现代码
2011/09/01 Javascript
扩展IE中一些不兼容的方法如contains、startWith等等
2014/01/09 Javascript
jQuery带箭头提示框tooltips插件集锦
2014/11/17 Javascript
JS 作用域与作用域链详解
2015/04/07 Javascript
jquery马赛克拼接翻转效果代码分享
2015/08/24 Javascript
AngularJS路由实现页面跳转实例
2017/03/03 Javascript
Bootstrap 模态框(Modal)带参数传值实例
2017/08/20 Javascript
Node.js搭建WEB服务器的示例代码
2018/08/15 Javascript
小程序实现留言板
2018/11/02 Javascript
微信小程序实现购物车代码实例详解
2019/08/29 Javascript
JS实现简单随机3D骰子
2019/10/24 Javascript
python 获取本机ip地址的两个方法
2013/02/25 Python
Python实现批量把SVG格式转成png、pdf格式的代码分享
2014/08/21 Python
Python中的赋值、浅拷贝、深拷贝介绍
2015/03/09 Python
python使用PyGame模块播放声音的方法
2015/05/20 Python
Python爬取成语接龙类网站
2018/10/19 Python
使用python实现mqtt的发布和订阅
2019/05/05 Python
python Elasticsearch索引建立和数据的上传详解
2019/08/04 Python
Numpy的简单用法小结
2019/08/28 Python
python3文件复制、延迟文件复制任务的实现方法
2019/09/02 Python
使用python写一个自动浏览文章的脚本实例
2019/12/05 Python
如何利用python进行时间序列分析
2020/08/04 Python
CSS3实现瀑布流布局与无限加载图片相册的实例代码
2016/12/22 HTML / CSS
职业教育毕业生求职信
2013/11/09 职场文书
教育专业自荐书范文
2013/12/17 职场文书
我的中国梦演讲稿500字
2014/08/19 职场文书
小学六一儿童节活动方案
2014/08/27 职场文书
爱护公共设施倡议书
2014/08/29 职场文书
迎新生欢迎词2015
2015/07/16 职场文书
运动会加油稿50字
2015/07/21 职场文书
Oracle 数据仓库ETL技术之多表插入语句的示例详解
2021/04/12 Oracle
实战 快速定位MySQL的慢SQL
2022/03/22 MySQL