Python 教程
/ 副本/視圖
副本/視圖
副本和視圖之間的區(qū)別
副本和數(shù)組視圖之間的主要區(qū)別在于副本是一個新數(shù)組,而這個視圖只是原始數(shù)組的視圖。
副本擁有數(shù)據(jù),對副本所做的任何更改都不會影響原始數(shù)組,對原始數(shù)組所做的任何更改也不會影響副本。
視圖不擁有數(shù)據(jù),對視圖所做的任何更改都會影響原始數(shù)組,而對原始數(shù)組所做的任何更改都會影響視圖。
副本:
實例
進行復(fù)制,更改原始數(shù)組并顯示兩個數(shù)組:
import numpy as np arr = np.array([1, 2, 3, 4, 5]) x = arr.copy() arr[0] = 61 print(arr) print(x)
運行實例
該副本不應(yīng)受到對原始數(shù)組所做更改的影響。
視圖:
實例
創(chuàng)建視圖,更改原始數(shù)組,然后顯示兩個數(shù)組:
import numpy as np arr = np.array([1, 2, 3, 4, 5]) x = arr.view() arr[0] = 61 print(arr) print(x)
運行實例
視圖應(yīng)該受到對原始數(shù)組所做更改的影響。
在視圖中進行更改:
實例
創(chuàng)建視圖,更改視圖,并顯示兩個數(shù)組:
import numpy as np arr = np.array([1, 2, 3, 4, 5]) x = arr.view() x[0] = 31 print(arr) print(x)
運行實例
原始數(shù)組應(yīng)該受到對視圖所做更改的影響。
檢查數(shù)組是否擁有數(shù)據(jù)
如上所述,副本擁有數(shù)據(jù),而視圖不擁有數(shù)據(jù),但是我們?nèi)绾螜z查呢?
每個 NumPy 數(shù)組都有一個屬性 base
,如果該數(shù)組擁有數(shù)據(jù),則這個 base 屬性返回 None
。
否則,base
屬性將引用原始對象。
實例
打印 base 屬性的值以檢查數(shù)組是否擁有自己的數(shù)據(jù):
import numpy as np arr = np.array([1, 2, 3, 4, 5]) x = arr.copy() y = arr.view() print(x.base) print(y.base)
運行實例
副本返回 None
。
視圖返回原始數(shù)組。