gpt4 book ai didi

python - 截断一个大数组 (A = A[ :N]) — does the original A ever get cleared? 我可以 "get rid of"A[ :N]. 基数和 "transfer ownership"吗?

转载 作者:太空宇宙 更新时间:2023-11-03 15:39:13 24 4
gpt4 key购买 nike

假设我有一个大数组:

A = numpy.arange(100000000)

现在我截断它:

A = A[:10]

我曾经认为,假设我不再有一个名称绑定(bind)到原始的 A,它的引用计数已经下降到零并且它将被垃圾收集。但是,A.base 还是偷偷引用了原来的数组!这是否意味着清除它的唯一方法是制作一个显式副本,即

A = A[:10].copy()

或者是否有其他方法,也就是说,将使用的内存的主要所有权转移给新对象,而原始对象可以被垃圾收集?我担心这可能是我的部分代码中细微内存泄漏的根源。

(远程相关问题: Memory-efficient way to truncate large array in Matlab )

最佳答案

当你这样做时:

A = A[:10]

您正在返回原始 A 的 View (因为它是切片索引)而不是创建新数组。所以实际上,原来的 A 并没有被释放,因为你仍然需要它。

正确的方法确实是创建一个副本,要么:

A = A[:10].copy()

或者:

A = np.array(A[:10])

关于python - 截断一个大数组 (A = A[ :N]) — does the original A ever get cleared? 我可以 "get rid of"A[ :N]. 基数和 "transfer ownership"吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53611603/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com