當計算和操做數組時,它們的數據有時被複制到新的數組中,有時不復制。這裏咱們作個區分。python
簡單賦值不會建立數組對象或其數據的拷貝。數組
import numpy as np a = np.arange(6) a Out[165]: array([0, 1, 2, 3, 4, 5]) b = a id(a) Out[166]: 336914267312 id(b) # id(a)和id(b)結果相同 Out[167]: 336914267312 b.shape = 3,2 a.shape # 修改b形狀,結果a的形狀也變了 Out[170]: (3, 2) b[0,0] = 12 #修改b的值,結果a的值也變化 b Out[168]: array([[12, 1], [ 2, 3], [ 4, 5]]) a Out[169]: array([[12, 1], [ 2, 3], [ 4, 5]])
不一樣的數組對象能夠共享相同的數據。view
方法建立一個新數組對象,該對象看到相同的數據。與前一種狀況不一樣,新數組的維數更改不會更改原始數據的維數,可是新數組數據更改後,也會影響原始數據。spa
c = a.view() c is a Out[171]: False c.base is a Out[172]: True c.flags.owndata Out[173]: False c.shape = 2,3 #c的維度更改,a的維度不變 a.shape Out[174]: (3, 2) c[0,1] = 1234 #c的值變化,a的值也變化 a Out[175]: array([[ 12, 1234], [ 2, 3], [ 4, 5]])
copy
方法生成數組及其數據的完整拷貝。code
d = a.copy() d Out[176]: array([[ 12, 1234], [ 2, 3], [ 4, 5]]) d is a Out[177]: False d.base is a Out[178]: False d[0,0] = 9999 #修改數組d的值,a不會受影響 d Out[179]: array([[9999, 1234], [ 2, 3], [ 4, 5]]) a Out[180]: array([[ 12, 1234], [ 2, 3], [ 4, 5]])