对于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 Mysql数据库操作 Perl操作Mysql数据库
Jan 12 Python
Python学习笔记_数据排序方法
May 22 Python
python遍历文件夹下所有excel文件
Jan 03 Python
Python实现按中文排序的方法示例
Apr 25 Python
python 通过类中一个方法获取另一个方法变量的实例
Jan 22 Python
python数据化运营的重要意义
Nov 25 Python
numpy.ndarray 实现对特定行或列取值
Dec 05 Python
python实现百度OCR图片识别过程解析
Jan 17 Python
jupyter notebook 添加kernel permission denied的操作
Apr 21 Python
Python爬虫代理池搭建的方法步骤
Sep 28 Python
Django缓存Cache使用详解
Nov 30 Python
python math模块的基本使用教程
Jan 16 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中的三元运算符使用说明
2011/07/03 PHP
PHP设计模式之调解者模式的深入解析
2013/06/13 PHP
php解决抢购秒杀抽奖等大流量并发入库导致的库存负数的问题
2014/06/19 PHP
PHP常用正则表达式集锦
2014/08/17 PHP
CI框架常用经典操作类总结(路由,伪静态,分页,session,验证码等)
2016/11/21 PHP
php创建图像具体步骤
2017/03/13 PHP
PHP simplexml_load_file()函数讲解
2019/02/03 PHP
php文件操作之文件写入字符串、数组的方法分析
2019/04/15 PHP
Jquery 常用方法经典总结
2010/01/28 Javascript
JavaScript 操作键盘的Enter事件(键盘任何事件),兼容多浏览器
2010/10/11 Javascript
jQuery中:enabled选择器用法实例
2015/01/04 Javascript
JS清除选择内容的方法
2015/01/29 Javascript
jQuery实现在下拉列表选择时获取json数据的方法
2015/04/16 Javascript
JS实现网页每隔3秒弹出一次对话框的方法
2015/11/09 Javascript
日常收集整理的JavaScript常用函数方法
2015/12/10 Javascript
学习JavaScript设计模式之模板方法模式
2016/01/20 Javascript
Websocket协议详解及简单实例代码
2016/12/12 Javascript
通过npm引用的vue组件使用详解
2017/03/02 Javascript
值得分享和收藏的xmlplus组件学习教程
2017/05/05 Javascript
基于js的变量提升和函数提升(详解)
2017/09/17 Javascript
利用three.js画一个3D立体的正方体示例代码
2017/11/19 Javascript
Node.js 使用request模块下载文件的实例
2018/09/05 Javascript
JavaScript刷新页面的几种方法总结
2019/03/28 Javascript
[05:37]DOTA2-DPC中国联赛 正赛 Elephant vs iG 选手采访
2021/03/11 DOTA
python实现将汉字转换成汉语拼音的库
2015/05/05 Python
python使用代理ip访问网站的实例
2018/05/07 Python
python破解bilibili滑动验证码登录功能
2019/09/11 Python
Python如何基于selenium实现自动登录博客园
2019/12/16 Python
django 获取字段最大值,最新的记录操作
2020/08/09 Python
英国女性化妆品收纳和家具网站:Beautify
2019/12/07 全球购物
村委会换届选举方案
2014/05/03 职场文书
公司合作意向书范文
2014/07/30 职场文书
趣味运动会广播稿
2014/09/13 职场文书
2015元旦标语横幅
2014/12/09 职场文书
银行文明优质服务培训心得体会
2016/01/09 职场文书
关于mysql中string和number的转换问题
2022/06/14 MySQL