更多关于:NumPy…
完全不复制
简单赋值不会创建数组对象或其数据的拷贝。
a = np.arange(6) a b = a id(a) id(b) # id(a)和id(b)结果相同 b.shape = 3,2 a.shape # 修改b形状,结果a的形状也变了
视图或浅复制
不同的数组对象可以共享相同的数据。
view
方法创建一个新数组对象,该对象看到相同的数据。
与前一种情况不同,新数组的维数更改不会更改原始数据的维数,但是新数组数据更改后,也会影响原始数据。
››› c = a.view() ››› c is a False ››› c.base is a True ››› c.flags.owndata False ››› c.shape = 2,6 ››› a.shape (3L, 4L) ››› c[0,4] = 1234 ››› a array([[ 0, 1, 2, 3], [1234, 5, 6, 7], [ 8, 9, 10, 11]])
深复制
copy
方法生成数组及其数据的完整拷贝。
››› d = a.copy() # 一个完整的新的数组 ››› d is a False ››› d.base is a False ››› d[0,0] = 9999 ››› a # 修改数组 d 的值,a不会受影响 array([[ 0, 10, 10, 3], [1234, 10, 10, 7], [ 8, 10, 10, 11]])