对于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-python简明笔记(ubuntu环境)
Jun 25 Python
基于Python对数据shape的常见操作详解
Dec 25 Python
详解如何设置Python环境变量?
May 13 Python
pyqt5 禁止窗口最大化和禁止窗口拉伸的方法
Jun 18 Python
pytorch 加载(.pth)格式的模型实例
Aug 20 Python
python的json中方法及jsonpath模块用法分析
Dec 06 Python
python实现字典嵌套列表取值
Dec 16 Python
Python动态声明变量赋值代码实例
Dec 30 Python
tensorflow 实现自定义layer并添加到计算图中
Feb 04 Python
python中使用you-get库批量在线下载bilibili视频的教程
Mar 10 Python
Pytorch mask-rcnn 实现细节分享
Jun 24 Python
python 实现表情识别
Nov 21 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二进制流 逐bit的低位在前算法(详解)
2013/06/13 PHP
PHP版微信公众平台红包API
2015/04/02 PHP
PHP判断FORM表单或URL参数来的数据是否为整数的方法
2016/03/25 PHP
PhpStorm2020.1 安装 debug - Postman 调用的详细教程
2020/08/17 PHP
Ext 表单布局实例代码
2009/04/30 Javascript
用jquery生成二级菜单的实例代码
2013/06/24 Javascript
快速解决FusionCharts联动的中文乱码问题
2013/12/04 Javascript
js中typeof的用法汇总
2013/12/12 Javascript
介绍JavaScript的一个微型模版
2015/06/24 Javascript
window.onload使用指南
2015/09/13 Javascript
详解javascript遍历方式
2015/11/11 Javascript
JavaScript事件类型中焦点、鼠标和滚轮事件详解
2016/01/25 Javascript
JavaScript中object和Object的区别(详解)
2017/02/27 Javascript
JS动态插入脚本和插入引用外部链接脚本的方法
2018/05/21 Javascript
简述JS控制台的使用
2018/07/15 Javascript
webpack优化的深入理解
2018/12/10 Javascript
Vue路由之JWT身份认证的实现方法
2019/08/26 Javascript
jquery将信息遍历到界面上实例代码
2020/01/21 jQuery
[02:31]《DAC最前线》之选手酒店现场花絮
2015/01/30 DOTA
Python爬取京东的商品分类与链接
2016/08/26 Python
Python:Scrapy框架中Item Pipeline组件使用详解
2017/12/27 Python
python通过getopt模块如何获取执行的命令参数详解
2017/12/29 Python
详谈python3中用for循环删除列表中元素的坑
2018/04/19 Python
python在html中插入简单的代码并加上时间戳的方法
2018/10/16 Python
python如何实现数据的线性拟合
2019/07/19 Python
一篇文章带你搞定Ubuntu中打开Pycharm总是卡顿崩溃
2020/11/02 Python
用HTML5的canvas实现一个炫酷时钟效果
2016/05/20 HTML / CSS
Html5 new XMLHttpRequest()监听附件上传进度
2021/01/14 HTML / CSS
村官工作鉴定评语
2014/01/27 职场文书
企业理念标语
2014/06/09 职场文书
企业领导对照检查材料
2014/08/20 职场文书
教师思想作风整顿个人剖析材料
2014/10/10 职场文书
聘任协议书(挂靠)
2015/09/21 职场文书
SpringBoot 拦截器妙用你真的了解吗
2021/07/01 Java/Android
Vue项目打包、合并及压缩优化网页响应速度
2021/07/07 Vue.js
Java比较两个对象中全部属性值是否相等的方法
2021/08/07 Java/Android