您好,登錄后才能下訂單哦!
這篇“Python中Numpy的深拷貝和淺拷貝怎么使用”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“Python中Numpy的深拷貝和淺拷貝怎么使用”文章吧。
深拷貝和淺拷貝是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的深拷貝和淺拷貝怎么使用”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。