本教材由知了传课辛苦制作而成,仅供学习使用,请勿用于商业用途!如进行转载请务必注明出处!谢谢!

深拷贝和浅拷贝

在操作数组的时候,它们的数据有时候拷贝进一个新的数组,有时候又不是。这经常是初学者感到困惑。下面有三种情况:

一、不拷贝:

如果只是简单的赋值,那么不会进行拷贝。示例代码如下:

a = np.arange(12) b = a #这种情况不会进行拷贝 print(b is a) #返回True,说明b和a是相同的

二、View或者浅拷贝:

有些情况,会进行变量的拷贝,但是他们所指向的内存空间都是一样的,那么这种情况叫做浅拷贝,或者叫做View(视图)。比如以下代码:

a = np.arange(12) c = a.view() print(c is a) #返回False,说明c和a是两个不同的变量 c[0] = 100 print(a[0]) #打印100,说明对c上的改变,会影响a上面的值,说明他们指向的内存空间还是一样的,这种叫做浅拷贝,或者说是view

三、深拷贝:

将之前数据完完整整的拷贝一份放到另外一块内存空间中,这样就是两个完全不同的值了。示例代码如下:

a = np.arange(12) d = a.copy() print(d is a) #返回False,说明d和a是两个不同的变量 d[0] = 100 print(a[0]) #打印0,说明d和a指向的内存空间完全不同了。

四、例子:

像之前讲到的flattenravel就是这种情况,ravel返回的就是View,而flatten返回的就是深拷贝。

1475人已阅读,今天你学习了吗?

添加新回复
目录