def foo():
x = np.ones((10,10))
return x[:5,:5]
如果我调用
y = foo()
,我将得到一个5x5的数组(x
中值的1/4)。但是x
中的其他值会发生什么,它们会在内存中保留还是以某种方式被垃圾回收?我想要理解这个问题。def foo():
x = np.ones((10,10))
return x[:5,:5]
y = foo()
,我将得到一个5x5的数组(x
中值的1/4)。但是x
中的其他值会发生什么,它们会在内存中保留还是以某种方式被垃圾回收?我想要理解这个问题。base
属性中看到它用于此目的的引用。In [2]: x = numpy.ones((10, 10))
In [3]: y = x[:5, :5]
In [4]: y.base is x
Out[4]: True
y = y.copy()
会导致清理x
。 - Ericy
被保留。垃圾收集器在这里没有起作用;这是一个简单的引用计数案例。x
是数组的引用,而 y
是包含对数组引用的视图。当 x
消失时,在 y
中仍然存在某处引用。直到其引用计数为零(现在不是),数组才被处理。但是,如果 y
超出范围,则将处理该视图,从而允许处理数组。 - kindall