python - 在 Python 中,如果在递归调用后未使用变量,递归函数中变量的内存是否会被释放?

标签 python recursion

下面是一些迭代编写的代码,与 DBSCAN 算法有点相似:

rw = 100
for r in range(rw):
    neighs = retrieve_neighs(r)
    # rest of body

如果我使用递归重写它,我可能会这样写:

rw = 100
def foo(r):
    if r < rw:
        neighs = retrieve_neighs(r)
        # rest of body
        foo(r + 1)
foo(0)

我希望 retrieve_neighs 返回一个点列表(或一些集合)——这开启了加载整个数据文件的可能性,对吧?有没有认识到neighs 之后没有用

foo(r + 1)

所以内存嘶嘶指的是释放?

最佳答案

您所描述的是尾部调用优化的主要影响,Python 明确不会这样做,因为 Guido 认为它 isn't worth the tradeoffs ,尤其是在调试信息方面。如果算法的递归版本更清晰,您可以考虑在不再需要它时显式执行 del neighs - 这具有保存效果,因为变量超出范围,可能使其符合垃圾条件收藏。

关于python - 在 Python 中,如果在递归调用后未使用变量,递归函数中变量的内存是否会被释放?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27664427/

相关文章:

function - 方案中的尾递归幂函数

function - 为什么这个程序集产生 24 而不是 4?

python - 展平字典时处理自引用

python - 使矩形对象可滚动

python - gevent 猴子补丁破坏了 gevent.sleep(0)?

python - ZeroMQ 轮询器 vs Tornados EventLoop

python - 按列表排序索引 - Python Pandas

recursion - Erlang:使用递归从列表中选择唯一项

python - 如何处理从一个模型字段到另一个模型字段的数据

Java : Recursively Iterating over a map