对于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实现响应游戏中事件的方法(附源码)
Nov 11 Python
python常用知识梳理(必看篇)
Mar 23 Python
python中日志logging模块的性能及多进程详解
Jul 18 Python
python3+PyQt5重新实现QT事件处理程序
Apr 19 Python
Python列表(List)知识点总结
Feb 18 Python
详解python读取image
Apr 03 Python
python实现合并多个list及合并多个django QuerySet的方法示例
Jun 11 Python
Python实现打印实心和空心菱形
Nov 23 Python
Tensorflow全局设置可见GPU编号操作
Jun 30 Python
使用Python pip怎么升级pip
Aug 11 Python
python 实现一个图形界面的汇率计算器
Nov 09 Python
解决python的空格和tab混淆而报错的问题
Feb 26 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 计算两个时间戳相隔的时间的函数(小时)
2009/12/18 PHP
php中的观察者模式
2010/03/24 PHP
小文件php+SQLite存储方案
2010/09/04 PHP
PHP实现微信公众平台音乐点播
2014/03/20 PHP
Thinkphp无限级分类代码
2015/11/11 PHP
php判断str字符串是否是xml格式数据的方法示例
2017/07/26 PHP
ie6下png图片背景不透明的解决办法使用js实现
2013/01/11 Javascript
AngularJS基础 ng-keydown 指令简单示例
2016/08/02 Javascript
禁用backspace网页回退功能的实现代码
2016/11/15 Javascript
javascript防篡改对象实例详解
2017/04/10 Javascript
js与jQuery实现的用户注册协议倒计时功能实例【三种方法】
2017/11/09 jQuery
使用Bootstrap4 + Vue2实现分页查询的示例代码
2017/12/21 Javascript
vue的传参方式汇总和router使用技巧
2018/05/22 Javascript
VUE v-for循环中每个item节点动态绑定不同函数的实例
2018/09/26 Javascript
理理Vue细节(推荐)
2019/04/16 Javascript
微信小程序实现同一页面取值的方法分析
2019/04/30 Javascript
Vue Object 的变化侦测实现代码
2020/04/15 Javascript
[02:33]2018DOTA2亚洲邀请赛赛前采访——LGD
2018/04/04 DOTA
用Python脚本生成Android SALT扰码的方法
2013/09/18 Python
Python中operator模块的操作符使用示例总结
2016/06/28 Python
R语言 vs Python对比:数据分析哪家强?
2017/11/17 Python
使用pyinstaller打包PyQt4程序遇到的问题及解决方法
2019/06/24 Python
python 遗传算法求函数极值的实现代码
2020/02/11 Python
Python爬虫requests库多种用法实例
2020/05/28 Python
python绘制雷达图实例讲解
2021/01/03 Python
利用css3画个同心圆示例代码
2017/07/03 HTML / CSS
ebookers英国:隶属全球最大的在线旅游公司Expedia
2017/12/28 全球购物
进程的查看和调度分别使用什么命令
2013/12/14 面试题
会计专业自我鉴定
2014/02/10 职场文书
班委竞选演讲稿
2014/04/28 职场文书
七一讲话心得体会
2014/09/05 职场文书
领导班子个人查摆问题对照检查材料
2014/10/02 职场文书
2016入党积极分子党课培训心得体会
2016/01/06 职场文书
2019自荐信范文集锦!
2019/07/03 职场文书
CSS3实现的水平标题菜单
2021/04/14 HTML / CSS
JavaScript与JQuery框架基础入门教程
2021/07/15 Javascript