对于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基于pygame实现的font游戏字体(附源码)
Nov 11 Python
python版本单链表实现代码
Sep 28 Python
Python读取txt某几列绘图的方法
Oct 14 Python
Python2和Python3之间的str处理方式导致乱码的讲解
Jan 03 Python
对python For 循环的三种遍历方式解析
Feb 01 Python
windows下numpy下载与安装图文教程
Apr 02 Python
Python将文字转成语音并读出来的实例详解
Jul 15 Python
Python如何获取Win7,Win10系统缩放大小
Jan 10 Python
Python操作注册表详细步骤介绍
Feb 05 Python
Python3搭建http服务器的实现代码
Feb 11 Python
django-利用session机制实现唯一登录的例子
Mar 16 Python
CentOS 7如何实现定时执行python脚本
Jun 24 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
DOTA2 玩家自创拉野攻略 特色英雄快速成长篇
2020/04/20 DOTA
php-redis中的sort排序函数总结
2015/07/08 PHP
php自定义扩展名获取函数示例
2016/12/12 PHP
thinkphp3.2中实现phpexcel导出带生成图片示例
2017/02/14 PHP
laravel validate 设置为中文的例子(验证提示为中文)
2019/09/29 PHP
Nigma vs Alliance BO5 第二场2.14
2021/03/10 DOTA
jquery的ajax请求全面了解
2013/03/20 Javascript
js中定义一个变量并判断其是否为空的方法
2014/05/13 Javascript
JS案例分享之金额小写转大写
2014/05/15 Javascript
AngularJS入门教程之ng-class 指令用法
2016/08/01 Javascript
jQuery实现的自定义弹出层效果实例详解
2016/09/04 Javascript
AngularJS压缩JS技巧分析
2016/11/08 Javascript
vue2 自定义动态组件所遇到的问题
2017/06/08 Javascript
微信小程序实现图片懒加载的示例代码
2017/12/13 Javascript
浅谈Vue2.0父子组件间事件派发机制
2018/01/08 Javascript
p5.js入门教程之键盘交互
2018/03/19 Javascript
详解node.js的http模块实例演示
2018/07/12 Javascript
详解promise.then,process.nextTick, setTimeout 以及 setImmediate的执行顺序
2018/11/21 Javascript
vue项目中使用vue-i18n报错的解决方法
2019/01/13 Javascript
Vuex中实现数据状态查询与更改
2019/11/08 Javascript
javascript设计模式 ? 访问者模式原理与用法实例分析
2020/04/26 Javascript
JS指定音频audio在某个时间点进行播放
2020/11/28 Javascript
Python的Flask框架标配模板引擎Jinja2的使用教程
2016/07/12 Python
python django 增删改查操作 数据库Mysql
2017/07/27 Python
django缓存配置的几种方法详解
2018/07/16 Python
Python实现的KMeans聚类算法实例分析
2018/12/29 Python
django mysql数据库及图片上传接口详解
2019/07/18 Python
CSS3 Columns分列式布局方法简介
2014/05/03 HTML / CSS
实例讲解CSS3中的border-radius属性
2015/08/18 HTML / CSS
BONIA官方网站:国际奢侈品牌和皮革专家
2016/11/27 全球购物
餐饮业经理竞聘演讲稿
2014/01/14 职场文书
安全负责人任命书
2014/06/06 职场文书
小学社团活动总结
2014/06/27 职场文书
2014年社区工作总结
2014/11/18 职场文书
获奖感言一句话
2015/07/31 职场文书
Python加密技术之RSA加密解密的实现
2022/04/08 Python