Skip to main content
 首页 » 编程设计

python之共享数组 View 和数组数据副本的定义和区别

2025年05月04日16JeffreyZhao

我有一本书上写着,“重要的是要知道什么时候我们在处理共享数组 View ,什么时候我们有一个 数组数据的副本。”,但是这本书从未具体说明这两件事是什么。

谁能给出一个非常简单的解释什么是共享数组 View ,什么是数组数据的副本?和区别?有人可以用一个简单的比喻来解释吗?谢谢!

请您参考如下方法:

一种检查方法是使用 numpy 的 may_share_memory:

In [11]: a = np.array([1, 2, 3]) 
 
In [12]: b = a[0:2] 
 
In [13]: c = a.copy() 
 
In [14]: np.may_share_memory(a, b) 
Out[14]: True 
 
In [15]: np.may_share_memory(a, c) 
Out[15]: False 
 
In [16]: np.may_share_memory(b, c) 
Out[16]: False 

这很重要,因为分配给副本不会影响原始数组,而更改 View 会:

In [21]: b[1] = 7 
 
In [22]: a 
Out[22]: array([1, 7, 3]) 
 
In [23]: c[1] = 11 
 
In [24]: a 
Out[24]: array([1, 7, 3]) 
 
In [25]: c 
Out[25]: array([ 1, 11,  3])