numpy copy(无拷贝 浅拷贝、深拷贝)类型说明
numpy copy分为三种,no copy,shallow copy or view,deep copy三种。
1 无拷贝
简单的复制操作不会产生对象的复制操作。
1 import numpy as np 2 a = np.arange(12) 3 b=a #对象复制,a,b地址一样 4 b.shape = 3,4 #a对象的shape也会变化
2 浅拷贝
view操作,如numpy的slice,只会copy父对象,不会copy底层的数据,共用原始引用指向的对象数据。如果在view上修改数据,会直接反馈到原始对象。
1 import numpy as np 2 a = np.arange(12) 3 b=a #对象复制,a,b地址一样 4 b.shape = 3,4 #a对象的shape也会变化 5 print id(a) 6 7 c = a.view()#c的引用地址变化了 8 print id(c) 9 c.shape = 2,6 #a.shape不变,但是修改c的数据会导致a的数据也会变化 10 c[0]=999 11 print a 12 13 14 #输出结果: 15 16 51195536 17 18 52398800 19 [[999 999 999 999] 20 [999 999 6 7] 21 [ 8 9 10 11]]
3 深拷贝
对对象及其子对象都进行copy一份,对新生成的对象修改删除操作不会影响到原对象。
import numpy as np a = np.arange(12) b=a #对象复制,a,b地址一样 b.shape = 3,4 #a对象的shape也会变化 print id(a) d = a.copy() #deep copy print id(d)