Numpy中的深拷贝与浅拷贝(视图)

1. numpy中简单的浅拷贝与深拷贝
浅拷贝的特点:
①公用一个值;
②这两个变量的内存地址一样;
③其中一个变量的值改变时,另外一个变量的值也会改变;
Numpy中的深拷贝与浅拷贝(视图)_第1张图片
深拷贝的特点:
①变量的内存地址不同;
②变量各有自己的值,且互不影响;
③对其任意一个变量的值的改变不会影响其余变量的值;
Numpy中的深拷贝与浅拷贝(视图)_第2张图片
2. numpy进阶浅拷贝(视图)与深拷贝
1)浅拷贝(视图)——ndarray.view()
共享“视图”(view)的两个变量,当其中一个变量的值改变时,另一个变量的值也随之改变。此时,变量间的“拷贝”也是“浅拷贝”。
Numpy中的深拷贝与浅拷贝(视图)_第3张图片
2)深拷贝——np.copy()
通过“深拷贝”得到的变量互不干扰,其中一个变量的值改变时,不影响其他变量的值。
Numpy中的深拷贝与浅拷贝(视图)_第4张图片
numpy中,一个ndarray的视图和原ndarray是不同的对象,但是其共享ndarray值的内存,所以当修改其中一个对象的值的时候,两个对象都会发生改变。这样两个对象是互相关联的,这样做的好处就是不会涉及到数据在内存中的复制,这样可以节省空间,提高性能;而不好的地方就是两个对象是并不是相互独立的,有时候我们并不预期改变一个对象会影响到其他的对象。因此,如果我们希望两个ndarray是完全独立的,那么可以通过ndarray的copy函数,返回其副本,这个副本在内存中具有独立的空间,因此不存在共享内存,所以也就完全独立,不会相互影响。

一般地,切片索引返回的是视图(浅拷贝),而数组索引返回的是副本,切片和数组组合索引返回的自然也是副本(深拷贝);此外,reshape函数返回的也是视图。通常状况下,大部分函数返回的都是副本,比如hstack、vstack等。
(最后两段话的原文链接https://blog.csdn.net/S_o_l_o_n/article/details/108819034)

你可能感兴趣的:(python基础,python,numpy,开发语言)