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

发布于 2021-01-29 18:30:31

在许多情况下,您确定您肯定不会再使用该列表,我希望现在就释放内存。

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

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

del a[:]

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

那么最好的释放方法是吗?

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

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

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

关注者
0
被浏览
258
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。
    def release_list(a):
       del a[:]
       del a
    

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

    这意味着 唯一 一次del a[:]; del a释放比 单独del a引用更多的时间。 正是 在这种情况下,您
    应该清空列表:其他人仍在使用它!!!

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

    唯一需要考虑的是,当您有一个大对象(例如一个庞大的列表)时,对它进行一些操作,然后开始长时间运行(或占用大量内存)的子计算,其中大对象 是不是
    需要分计算。因为您具有对它的引用,所以在子计算完成之前您不会释放大对象,然后返回。在这种情况下(并且 只有
    这种情况),您可以del在开始子计算之前显式地引用大型对象,以便可以较早地释放大型对象(如果没有其他人正在使用它;如果主叫方在给你传递的对象,调用者
    确实 还需要你回来后,你会 很高兴它没有发布)。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看