将字典重置为空字典不会释放内存?

2024-05-19 23:26:05 发布

您现在位置:Python中文网/ 问答频道 /正文

所以, 我有一本字典,我想一天翻一次

所以。。像这样的

d = {}

def refresh():
    global d
    now = datetime.datetime.now()
    if now >= TIME_TO_REFRESH:
       d  = {}

当我查看内存配置文件时,内存会随着d大小的增长而增长,但是当它需要刷新时,我希望内存会下降。 问题是它确实。。但不是很大程度上。 我想知道我是否还有别的事情要做,以确保字典的全部内容都被刷新了。 也许它已经发生了,但是我找不到一个好的资源来查看垃圾收集器在这个实例中是如何工作的?你知道吗


Tags: to内存datetimeif字典timedef配置文件
2条回答

在上面的例子中,你并不是真的重置字典。只需将新的空名称指定给现有名称。要重置它,需要调用d.clear()。即使将其设置为None,也只是绑定中的更改,而不是可变对象本身。你知道吗

Python解释器使用引用计数决定何时释放内存,这意味着它计算存在多少引用(指向实际内存结构的名称)。如果它降到零,内存将不被使用,可以释放。因此,如果程序的其他部分包含引用内存,则无法释放。这是一个非常简单的声明(请参阅下面的第一篇文章链接以获得进一步的解释)。你知道吗

执行上述策略的名为垃圾收集器的组件也可能出于各种原因决定延迟释放内存。您可以(但不需要)通过执行以下代码强制执行:

import gc
gc.collect()

您可以在这篇伟大的文章中找到更多关于Python中垃圾收集工作原理的信息:https://rushter.com/blog/python-garbage-collector/

我会考虑做d.clear()。重新分配将创建一个新词典,旧词典最终将被垃圾收集,但这只是在所有其他引用都消失之后。.clear()实际上会删除字典中的内容。 https://stackoverflow.com/a/369925/3990806

相关问题 更多 >