对于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 相关文章推荐
python3.5仿微软计算器程序
Mar 30 Python
Python编程scoketServer实现多线程同步实例代码
Jan 29 Python
Python切片操作实例分析
Mar 16 Python
Python中的函数作用域
May 07 Python
为什么str(float)在Python 3中比Python 2返回更多的数字
Oct 16 Python
python实现整数的二进制循环移位
Mar 08 Python
Django自定义用户登录认证示例代码
Jun 30 Python
详解程序意外中断自动重启shell脚本(以Python为例)
Jul 26 Python
Python在cmd上打印彩色文字实现过程详解
Aug 07 Python
Python sublime安装及配置过程详解
Jun 29 Python
Python使用struct处理二进制(pack和unpack用法)
Nov 12 Python
Python读写Excel表格的方法
Mar 02 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
Windows PHP5和Apache的安装与配置
2009/06/08 PHP
PHP实现的购物车类实例
2015/06/17 PHP
php查看一个变量的占用内存的实例代码
2020/03/29 PHP
用php实现分页效果的示例代码
2020/12/10 PHP
JavaScript 学习笔记(九)call和apply方法
2010/01/11 Javascript
jquery操作select option 的代码小结
2011/06/21 Javascript
圣诞节Merry Christmas给博客添加浪漫的下雪效果基于jquery实现
2012/12/27 Javascript
js图片延迟加载的实现方法及思路
2013/07/22 Javascript
浅谈JavaScript事件的属性列表
2015/03/01 Javascript
基于JavaScript实现移除(删除)数组中指定元素
2016/01/04 Javascript
JavaScript简单获取页面图片原始尺寸的方法
2016/06/21 Javascript
Angular中实现树形结构视图实例代码
2017/05/05 Javascript
input输入框内容实时监测(附代码)
2017/08/15 Javascript
微信小程序视图template模板引用的实例详解
2017/09/20 Javascript
使用Object.defineProperty如何巧妙找到修改某个变量的准确代码位置
2018/11/02 Javascript
pydev使用wxpython找不到路径的解决方法
2013/02/10 Python
详解Python网络爬虫功能的基本写法
2016/01/28 Python
Python常用时间操作总结【取得当前时间、时间函数、应用等】
2017/05/11 Python
Python实现找出数组中第2大数字的方法示例
2018/03/26 Python
Python3之不使用第三方变量,实现交换两个变量的值
2019/06/26 Python
python numpy存取文件的方式
2020/04/01 Python
Pytorch十九种损失函数的使用详解
2020/04/29 Python
keras 权重保存和权重载入方式
2020/05/21 Python
解决python和pycharm安装gmpy2 出现ERROR的问题
2020/08/28 Python
python speech模块的使用方法
2020/09/09 Python
linux mint中搜狗输入法导致pycharm卡死的问题
2020/10/28 Python
html5新增的属性和废除的属性简要概述
2013/02/20 HTML / CSS
PUMA澳大利亚官方网站:德国运动品牌
2018/10/19 全球购物
Love, Bonito国际官网:新加坡女装品牌
2021/03/13 全球购物
linux比较文件内容的命令是什么
2013/03/04 面试题
文秘自荐信
2014/06/28 职场文书
保密工作目标责任书
2014/07/28 职场文书
委托公证书格式
2015/01/26 职场文书
学生检讨书范文
2015/01/27 职场文书
win10双系统怎么删除一个系统?win10电脑有两个系统删除一个的操作方法
2022/07/15 数码科技
HTML 里 img 元素的 src 和 srcset 属性的区别详解
2023/05/21 HTML / CSS