def release_list(a):
del a[:]
del a
不要 永远 做到这一点。Python自动释放所有不再引用的对象,因此可以简单地del a
确保如果未在其他任何地方引用列表,则将释放列表的内存。如果是这种情况,那么除非列表中的某些单独项目仍然被引用,否则单独的列表项目也将被释放(以及仅从其中引用的任何对象,依此类推等等)。
这意味着 一次del a[:]; del a
释放比 del a
引用更多的时间。 在这种情况下,您 不 应该清空列表:其他人仍在使用它!!!
基本上,您不应该考虑管理内存。相反,请考虑管理对对象的引用。在所有Python代码的99%中,Python会在您上次需要它之后不久就清理所有不需要的东西,这没有问题。每当函数完成该函数“ die”中的所有局部变量时,如果它们指向未在其他任何地方引用的对象,它们将被删除,并将级联到那些对象中包含的所有内容。
唯一需要考虑的是,当您有一个大对象(例如一个庞大的列表)时,对它进行一些操作,然后开始长时间运行(或占用大量内存)的子计算,其中大对象 是不是 需要分计算。因为您具有对它的引用,所以在子计算完成之前您不会释放大对象,然后返回。在这种情况下(并且 只有 这种情况),您可以del
在开始子计算之前显式地引用大型对象,以便可以较早地释放大型对象(如果没有其他人正在使用它;如果主叫方在给你传递的对象,调用者 还需要你回来后,你会 很高兴它没有发布)。