下面是一些迭代编写的代码,与 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/