python - 了解递归调用中的 Python 列表内存使用情况

标签 python c memory-management recursion

我只是想检查一下我是否正确理解了 Python 的内存管理。

以下函数将使用 O(j) 内存,但不会 O(nj) 内存,因为参数 n 是对列表的引用,而不是列表本身。

def cool(n,j):
    if j == 0:
        return
    return cool(n,j-1)

此外,假设这个函数是用 C 编写的,我假设使用 C 时它的内存使用量是 O(nj) 是否正确,因为列表/数组的副本是为每个递归调用创建。

最佳答案

是的,没错。每个递归步骤将使用 O(1) 内存:函数调用开销,每个函数参数一个指针。

您可以通过创建一个大对象 (x = "x"* 1024 * 1024 * 100) 来实验验证这一点,然后对其进行多次递归并检查进程的内存使用情况:

def recurse(x, n):
    if n == 0:
        raw_input("done! Check memory usage now.")
        return
    return recurse(x, n - 1)

recurse(x, 1000)

关于python - 了解递归调用中的 Python 列表内存使用情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32315032/

相关文章:

python - python中如何删除相同的字符串

python - 在 Python 中使用循环解析 XML

c - 构造变量后使其成为常量

C 字符 ** 导致内存泄漏

For循环中的PHP内存使用量不断增长

javascript - 无法在 Django 上下文中传递 json

python - python 中的 dfs 不工作请指导我有关错误

c - 我应该在这个 C 代码中添加什么来打开多个文件?

c - 如何使用 argv 打印 ASCII?

memory-management - SKShapeNode 具有无限的内存增长