python的深拷贝与浅拷贝,Python深拷贝和浅拷贝详解
本文主要介绍Python中Numpy的深层拷贝和浅层拷贝。通过讲解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]?但是运行完上面的代码,我们发现?答?然后呢。b?所有的价值观都相应地改变了。这主要是由于?Numpy?实际上,中变量的赋值操作是浅拷贝。
换句话说,此时两个变量指向同一块内存地址,如下所示:
那么,如果我们此时修改数组呢?原创_数组?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]
此时,如果我们改变数组?答?代码如下:.元素
将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 举个栗子
看上面的输出,可以清楚的看到数组?答?数组变了?b?没有变化,这是因为我们使用了深层拷贝。
此时的内存地址如下:
因为?原创_数组?然后呢。复制_数组?指向不同的内存地址空间,所以这个时候我们是对的?原创_数组?改变不会是对的?复制_数组?有影响。
3.2 探究原因
经过以上深抄和轻抄的例子和举例,相信大家都有了清晰的认识。然后,我们将以上知识点总结如下:
4. 技巧总结
如果需要知道两个变量是否指向同一个内存地址,可以方便的使用?是吗?操作。
浅拷贝示例:
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数组操作的浅拷贝和深拷贝背后的概念和原理,并给出相应的代码示例。
关于Python中Numpy的深度复制和浅层复制的这篇文章到此为止。有关Python Numpy的更多信息,请搜索热门IT软件开发工作室之前的文章或继续浏览下面的相关文章。希望大家以后多多支持热门IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。