对于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中的多进程、多线程、协程
Jun 22 Python
python实现机器学习之多元线性回归
Sep 06 Python
python pandas读取csv后,获取列标签的方法
Nov 12 Python
python的schedule定时任务模块二次封装方法
Feb 19 Python
python 中的列表生成式、生成器表达式、模块导入
Jun 19 Python
Python3从零开始搭建一个语音对话机器人的实现
Aug 23 Python
python配置文件写入过程详解
Oct 19 Python
Pyspark获取并处理RDD数据代码实例
Mar 27 Python
在python中使用pyspark读写Hive数据操作
Jun 06 Python
pycharm 关掉syntax检查操作
Jun 09 Python
浅谈哪个Python库才最适合做数据可视化
Jun 28 Python
OpenCV绘制圆端矩形的示例代码
Aug 30 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生成静态页面详解
2006/12/05 PHP
Smarty分页实现方法完整实例
2016/05/11 PHP
php微信开发之音乐回复功能
2018/06/14 PHP
在第一个input框内输入内容.textarea自动得到第一个文件框的值的javascript代码
2007/04/20 Javascript
capacityFixed 基于jquery的类似于新浪微博新消息提示的定位框
2011/05/24 Javascript
js取得url地址参数实例
2013/02/22 Javascript
JavaScript操纵窗口的方法小结
2013/06/28 Javascript
js创建子窗口并且回传值示例代码
2013/07/02 Javascript
实现高性能JavaScript之执行与加载
2016/01/30 Javascript
jQuery选择器及jquery案例详解(必看)
2016/05/20 Javascript
vue.js中过滤器的使用教程
2017/06/08 Javascript
微信小程序实现获取自己所处位置的经纬度坐标功能示例
2017/11/30 Javascript
Layui给数据表格动态添加一行并跳转到添加行所在页的方法
2018/08/20 Javascript
利用JavaScript缓存远程窃取Wi-Fi密码的思路详解
2018/11/05 Javascript
微信公众号平台接口开发 获取微信服务器IP地址方法解析
2019/08/14 Javascript
Element Dialog对话框的使用示例
2020/07/26 Javascript
js实现表格数据搜索
2020/08/09 Javascript
vue实现井字棋游戏
2020/09/29 Javascript
JS常用跨域方法实现原理解析
2020/12/09 Javascript
深入理解javascript中的this
2021/02/08 Javascript
python tensorflow基于cnn实现手写数字识别
2018/01/01 Python
详解Django之auth模块(用户认证)
2018/04/17 Python
python基于http下载视频或音频
2018/06/20 Python
Python3用tkinter和PIL实现看图工具
2018/06/21 Python
在TensorFlow中屏蔽warning的方式
2020/02/04 Python
pytorch实现从本地加载 .pth 格式模型
2020/02/14 Python
django 解决自定义序列化返回处理数据为null的问题
2020/05/20 Python
Django缓存Cache使用详解
2020/11/30 Python
ProForm英国站点:健身房和健身器材网上商店
2019/06/05 全球购物
小米俄罗斯授权商店:Xiaomi俄罗斯
2019/12/08 全球购物
生产主管岗位职责
2013/11/10 职场文书
校园文化标语
2014/06/18 职场文书
2014党员民主评议个人思想剖析发言
2014/09/19 职场文书
校长师德表现自我评价
2015/03/05 职场文书
2016年6月份红领巾广播稿
2015/12/21 职场文书
MySQL实现字段分割一行转多行的示例代码
2022/07/07 MySQL