Numpy:切片后的垃圾收集

Numpy: garbage collection after slicing

def foo():
    x = np.ones((10,10))
    return x[:5,:5]

如果我调用 y = foo(),我将得到一个 5x5 数组(x 中值的 1/4)。但是 x 中的其他值会发生什么情况,它们会保留在内存中还是以某种方式被垃圾收集?我想了解一下。

正如 kindall 在评论中所说,basic slicing 在 NumPy 数组上创建了原始数组的视图。视图必须使整个原始对象保持活动状态;您可以在视图的 base 属性中看到它用于执行此操作的引用。

In [2]: x = numpy.ones((10, 10))

In [3]: y = x[:5, :5]

In [4]: y.base is x
Out[4]: True