当前位置: 首页 > 面试题库 >

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

宣煜
2023-03-14
问题内容

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

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会在您上次需要它之后不久就清理所有不需要的东西,这没有问题。每当函数完成该函数“
die”中的所有局部变量时,如果它们指向未在其他任何地方引用的对象,它们将被删除,并将级联到那些对象中包含的所有内容。

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



 类似资料:
  • 问题内容: 我编写了一个Python程序,该程序作用于大型输入文件,以创建代表三角形的数百万个对象。该算法是: 读取输入文件 处理文件并创建一个三角形列表,以其顶点表示 以OFF格式输出顶点:顶点列表,后跟三角形列表。三角形由顶点列表中的索引表示 在打印出三角形之前必须先打印出完整的顶点列表的OFF要求意味着在将输出写入文件之前,必须将三角形的列表保留在内存中。同时,由于列表的大小,我遇到了内存错

  • 问题内容: 在以下示例中,我有一些有关内存使用的相关问题。 如果我在解释器中运行, 我的机器上使用的实际内存最高为80.9mb。那我 实际内存下降,但仅限于。解释器使用基线,因此不向 释放内存有什么好处?是否因为Python正在“提前计划”,以为你可能会再次使用那么多的内存? 它为什么特别释放- 释放的量基于什么? 有没有一种方法可以强制Python释放所有已使用的内存(如果你知道不会再使用那么多

  • 问题内容: 有没有一种类似于函数的释放Java内存的方法?还是将对象设置为null并依靠GC是唯一的选择? 问题答案: Java使用托管内存,因此分配内存的唯一方法是使用运算符,而释放内存的唯一方法是依靠垃圾回收器。 该内存管理白皮书(PDF)可能有助于解释发生了什么。 你还可以致电建议垃圾收集器立即运行。但是,Java Runtime做出最终决定,而不是你的代码。 根据Java文档, 调用gc方

  • 问题内容: 我正在阅读Python内存管理,希望减少应用程序的内存占用。有人建议,子流程可以大大减轻该问题;但是我在概念上需要做些麻烦。可以请一个简单的例子说明如何解决这个问题。 …变成一个 真正的 子处理函数,该函数不存储额外的“自由列表”? 奖励问题: 这个“自由列表”概念也适用于python c扩展吗? 问题答案: 关于优化建议的重要事项是确保仅在子流程中调用该建议。该和是无关的- 一旦你在

  • 问题内容: 我想获得应用程序中带有注释的类的完整列表。此操作的最佳机制是什么? ps。例如,JAX-RS实现如何找到所有带有注释的类?我想使用相同的机制。 问题答案: 通常,这是通过称为类路径扫描的过程完成的。通常,类加载器不允许扫描类路径上的所有类。但是通常唯一使用的类加载器是我们可以从中检索目录和jar文件的列表(请参阅getURLs),然后一个个地打开它们以列出可用的类。 这种方法由Scan

  • 问题内容: 我正在使用以下功能下载小于20MB的文件。它将全部内容读取到内存中,因为另一个功能必须先对字节执行工作,然后才能将其写入磁盘。 这可以正常工作,但是所有内存都在系统上消耗了。 是否可以在其他功能处理完之后释放使用的内存,以使内存使用量不会大于当前正在处理的字节数? 问题答案: 您可能会触发gc使用释放未使用的对象,并且可能敦促Go运行时使用释放内存到OS ,但是所有这些都只是在扑救。编