深拷贝浅拷贝python,Python深拷贝和浅拷贝详解
深度复制和轻度复制是Python中的重要概念。本文将重点讨论NumPy中深度复制和轻度复制的定义和原理。让我们和边肖一起学吧。
00-1010 1.导言2。浅抄2.1问题介绍2.2问题分析3。深抄3.1举个栗子3.2探究原因4。技能总结4.1判断是否指向同一个内存4.2其他数据类型5。摘要
目录
深度复制和浅层复制是Python中的重要概念。本文重点介绍NumPy中深度拷贝和浅拷贝相关操作的定义和原理。
废话少说,我们开始吧!
1. 引言
2. 浅拷贝
举个栗子的例子吧。我们有两个数组A和B,如下所示。示例代码如下:
将numpy作为np导入
a=np.array([1,2,3])
b=a
打印( a=,a)
打印( b=,b)
输出如下所示:
a=[1 2 3]
b=[1 2 3]
此时,如果我们对数组A进行以下更改,代码如下:
将numpy作为np导入
a=np.array([1,2,3])
b=a
a [0]=42
打印( a=,a)
打印( b=,b)
所以我们的问题是:此时b的值应该是多少?
运行上述代码后,我们得到如下输出:
a=[42 2 3]
b=[42 2 3]
2.1 问题引入
有些人可能会认为输出应该是a=[42 2 3]和b=[1 2 3],但是运行上面的代码后,我们发现A和B的值都发生了相应的变化。这主要是由于Numpy中变量的赋值,它实际上是作为一个浅层拷贝发生的。
换句话说,此时,两个变量指向同一个内存地址,如下所示:
所以,如果我们此时修改数组original_array中的一个元素,copy_array与original_array共享同一个内存,那么其中的元素也会发生相应的变化。
2.2 问题剖析
3. 深拷贝
如果要对Numpy数组进行深度复制,此时可以使用函数copy()。的相关示例代码如下:
将numpy作为np导入
a=np.array([1,2,3])
b=a.copy()
打印( a=,a)
打印( b=,b)
输出如下所示:
a=[1 2 3]
b=[1 2 3]
此时,如果我们更改数组A中的元素,代码如下:
将numpy作为np导入
a=np.array([1,2,3])
b=a.copy()
a [0]=42
打印( a=,a)
打印( b=,b)
此时的代码输出如下:
a=[42 2 3]
b=[1 2 3]
3.1 举个栗子
查看上面的输出,我们可以清楚地看到数组A发生了变化,而数组B没有变化。这是因为我们使用深层拷贝。的存储器地址如下:
由于original_array和copy_array指向不同的内存地址空间,我们对original_array的更改此时不会影响copy_array。
3.2 探究原因
经过以上深抄和轻抄的例子和举例,相信大家都有了清晰的认识。然后,我们将以上知识点总结如下:
4. 技巧总结
如果我们需要知道两个变量是否指向同一个内存地址,我们可以方便地使用is运算。
浅层拷贝的示例:
a=np.array([1,2,3])
b=a
打印(b是a)
输出如下所示:
真实的
深层拷贝示例:
a=np.array([1,2,3])
b=a.copy()
打印(b是a)
输出如下所示:
错误的
4.1 判断是否指向同一内存
尽管本文中的所有示例都使用了NumPy数组,但本文中涉及的知识也适用于Python中的列表和字典等其他数据类型。
简而言之,我们需要时刻牢记:在浅拷贝中,原数组和新数组一起执行同一块内存;同时,在深度复制中,新数组是原始数据的单独副本,它指向一个新的内存地址。
4.2 其他数据类型
本文重点介绍Python中Numpy数组操作的浅拷贝和深拷贝背后的概念和原理,并给出相应的代码示例。
关于如何理解Numpy中深度复制和浅层复制的这篇文章到此为止。关于Numpy的深度复制和浅度复制的更多信息,请搜索热门IT软件开发工作室之前的文章或者继续浏览下面的相关文章。希望大家以后多多支持热门IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。