如何在python中释放堆内存

时间:2017-10-29 14:07:31

标签: python memory-leaks heap-memory

我来自C ++,我在堆内存上工作,我必须使用'new'关键字删除我在堆上创建的堆内存,我总是在混乱中如何处理python中的堆内存停止内存泄漏请向我推荐任何文本,了解python内存分配和删除的详细信息。谢谢

2 个答案:

答案 0 :(得分:2)

您无需做任何事情:Python首先使用引用计数。这意味着对于每个对象,它保存一个计数器,当您通过一个新变量引用该对象时,该计数器会递增,并在您将该变量指向其他位置时递减计数器。如果计数器达到零,则该对象将被删除(或计划删除)。

然而,这还不够,因为两个对象可以相互引用,因此即使没有其他变量引用对象,这些对象也会保持活着。为此,Python有一个(可选的)垃圾收集器来执行循环检测。如果找到这样的循环,则删除对象。您可以致电gc.collect()安排此类收集。

简而言之: Python负责内存管理本身。当然,确保可以发布是您的任务。例如,明智的做法是不要长时间地引用大型物体。例如,您可以使用del关键字

来执行此操作
foo = ... # some large object

# ...
# use foo for some tasks

del foo

# ...
# do some other tasks

通过使用del,我们删除了foo变量,因此我们还减少了指向foo引用的对象的计数器。因此,引用的对象foo也可以安排删除(之前)。当然,编译器/口译员可以进行活体分析,也许可以发现自己不再使用foo,但最好是安全而不是抱歉。

简而言之: Python通过使用引用计数和垃圾收集器来管理内存本身,你必须担心的是,没有那么多的对象仍然存在"活着"如果不再需要这些

答案 1 :(得分:-1)

Python是一种高级语言。在这里你不必担心内存解除分配。 python运行时负责管理内存分配和解除分配。