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)
posted @ 2019-09-27 17:17  Parallax  阅读(444)  评论(0编辑  收藏  举报