<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
深拷貝和淺拷貝是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陣列操作的淺拷貝和深拷貝的概念和背後的原理,同時給出了相應的程式碼範例。
到此這篇關於Python中Numpy的深拷貝和淺拷貝的文章就介紹到這了,更多相關Python Numpy 內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45