Numpy深拷贝的概念和原理如何理解
Admin 2022-08-19 群英技术资讯 289 次浏览
深拷贝和浅拷贝是Python中重要的概念,本文重点介绍在NumPy中深拷贝和浅拷贝相关操作的定义和背后的原理。
闲话少说,我们直接开始吧!
我们来举个栗子,如下所示我们有两个数组a和b,样例代码如下:
import numpy as np a = np.array([1, 2, 3]) b = a print('a =', a) print('b =', b)
输出如下:
a = [1 2 3]
b = [1 2 3]
此时如果我们对数组a做如下改变,代码如下:
import numpy as np a = np.array([1, 2, 3]) b = a a [0] = 42 print('a =', a) print('b =', b)
那么我们的问题为: 此时b的值应该为多少?
运行上述代码后,我们得到输出如下:
a = [42 2 3]
b = [42 2 3]
也许有人会觉得输出应该为??a=[42 2 3]?
? 和 ??b=[1 2 3]?
? ,但是运行上述代码后我们发现??a?
?和??b?
?的值均发生了相应的改变。这主要是由于在??Numpy?
?中对变量的赋值操作,实际上发生的为浅拷贝。
换句话说,此时两个变量指向同一块内存地址,如下所示:
所以,此时如果我们修改数组??original_array?
?中的某个元素,`copy_array
??由于和?
?original_array`公用同一块内存,所以其中的元素也会发生相应的变化。
如果我们想要对??Numpy?
?数组执行深拷贝,此时我们可以使用函数??copy()?
?。
相关的样例代码如下:
import numpy as np a = np.array([1, 2, 3]) b = a.copy() print('a =', a) print('b =', b)
输出如下:
a = [1 2 3]
b = [1 2 3]
此时,如果我们改变数组??a?
?中的元素,代码如下:
import numpy as np a = np.array([1, 2, 3]) b = a.copy() a [0] = 42 print('a =', a) print('b =', b)
此时的代码输出如下:
a = [42 2 3]
b = [1 2 3]
观察上述输出,我们可以清楚地看到数组??a?
?发生了改变而数组??b?
?没有发生变化,这是由于我们使用了深拷贝。
此时的内存地址如下:
由于 ??original_array?
?和??copy_array?
?指向不同的内存地址空间,所以此时我们对??original_array?
?的改变并不会对??copy_array?
?带来影响。
经过上述对深拷贝和浅拷贝的举例和示例,相信大家都已有了清晰的认识,接着我们对上述知识点进行总结,归纳如下:
如果我们需要知道两个变量是否指向同一块内存地址,我们可以方便地使用??is?
?操作。
浅拷贝示例:
a = np.array([1, 2, 3]) b = a print(b is a)
输出如下:
True
深拷贝示例:
a = np.array([1, 2, 3]) b = a.copy() print(b is a)
输出如下:
False
尽管本文中所有的示例都使用了NumPy数组,但本文中所涉及的知识也适用于Python中的列表和字典等其他数据类型。
总之,我们需要时刻记载心中:在浅拷贝中,原始数组和新的数组共同执行同一块内存;同时在深拷贝中,新的数组是原始数据的单独的拷贝,它指向一块新的内存地址。
本文重点介绍了Python中对Numpy数组操作的浅拷贝和深拷贝的概念和背后的原理,同时给出了相应的代码示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
django聚合函数的用法是什么?很多新手对于django聚合函数不是很了解,因此这篇文章就主要介绍django聚合函数的用法,有这方面学习需求的朋友可以参考。
今天给大伙分享一下 Python 爬虫的教程,这次主要涉及到的是关于某 APP 的逆向分析并抓取数据,关于 APP 的反爬会麻烦一些,比如 Android 端的代码写完一般会进行打包并混淆加密加固,所以除了抓包之外,还需要对 APP 进行查壳脱壳反编译等操作。
这篇文章给大家分享的是有关Python图像处理的内容,主要介绍Python怎样实现对图像拼接,小编觉得挺实用的,因此分享给大家做个参考,接下来一起跟随小编看看吧。
定义匿名函数指一类无须定义标识符的函数或子程序。Python用lambda语法定义匿名函数,只需用表达式而无需申明。lambda语法的定义如下:lamb
这篇文章主要为大家介绍了python数字图像处理之基本图形的绘制,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008