【问题标题】:how to deallocate heap memory in python如何在python中释放堆内存
【发布时间】:2017-10-29 14:07:31
【问题描述】:

我来自 C++,在那里我处理堆内存,我不得不删除我使用“new”关键字在堆上创建的堆内存,我总是很困惑在 python 中要做什么才能停止堆内存内存泄漏请向我推荐任何有关python内存分配和删除详细信息的文本。谢谢

【问题讨论】:

  • Python 有一个垃圾收集器。所以你不需要这样做。
  • Python 不是 C++。 Python 为你做一切。
  • Python 是一种高级语言。在这里你不必担心内存释放。管理内存分配和解除分配是 python 运行时的责任。

标签: python memory-leaks heap-memory


【解决方案1】:

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

然而,这还不够,因为两个对象可以相互引用,因此即使没有其他变量引用对象,这些对象也会使彼此保持活动状态。为此,Python 有一个(可选的)garbage collector 来进行循环检测。如果发现此类循环,则删除对象。您可以致电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 通过使用引用计数和垃圾收集器来管理内存本身,您需要担心的是,如果不再需要这些对象,则不会有那么多对象仍然“活着” >.

【讨论】:

  • 感谢 Williem Van Onsem 并请推荐一本书以全面深入研究 Python 的 OOP。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2023-04-05
    • 1970-01-01
    • 2016-07-25
    • 2016-05-07
    • 2013-03-05
    • 1970-01-01
    • 1970-01-01
    • 2019-11-14
    相关资源
    最近更新 更多