gpt4 book ai didi

python - 如何在 python 列表中立即释放使用的内存?

转载 作者:IT老高 更新时间:2023-10-28 22:15:05 27 4
gpt4 key购买 nike

在很多情况下,你肯定不会再使用列表了,我希望现在应该释放内存

a = [11,22,34,567,9999]
del a

我不确定它是否真的释放内存,你可以使用

del a[:]

实际上删除列表 a 中的所有元素。

所以最好的发布方式是这样吗?

def realse_list(a):
del a[:]
del a

不太确定。需要您的意见。

顺便说一句,元组和集合怎么样?

最佳答案

def release_list(a):
del a[:]
del a

不要永远这样做。 Python 会自动释放所有不再被引用的对象,所以一个简单的 del a 可以确保如果列表在其他任何地方都没有引用,则列表的内存将被释放。如果是这种情况,那么各个列表项也将被释放(以及仅从它们引用的任何对象,依此类推),除非某些单独的项仍然被引用。

表示del a[:]; 只有的时候当列表在其他地方引用时,del a 将自行释放超过 del a 的内容。这正是当你不应该清空列表:其他人仍在使用它!!!

基本上,您不应该考虑管理内存。相反,请考虑管理对对象的引用。在所有 Python 代码的 99% 中,Python 会在你上次需要它之后很快清理掉所有你不需要的东西,这没有问题。每当一个函数完成该函数中的所有局部变量“死亡”时,如果它们指向没有在其他任何地方引用的对象,它们将被删除,并且将级联到这些对象中包含的所有内容。

您需要考虑的唯一时间是当您有一个大对象(比如一个巨大的列表)时,您对它做一些事情,然后开始一个长时间运行(或内存密集型)的子计算,其中子计算不需要大对象。因为您有对它的引用,所以在子计算完成然后您返回之前,不会释放大对象。在那种情况下(那种情况),您可以在开始子计算之前显式 del 对大对象的引用,以便大对象对象可以更早地被释放(如果没有其他人在使用它;如果调用者将对象传递给您并且调用者确实在您返回后仍然需要它,那么您将非常 很高兴它没有发布)。

关于python - 如何在 python 列表中立即释放使用的内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12417498/

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