当前python的递归深度为1000,但是我无法理解为什么所有的东西都位于堆上,所以为什么会有一个限制。
Python中的内存管理涉及一个私有堆,其中包含所有 Python对象和数据结构。这个私人的管理 堆是由Python内存管理器在内部确保的
避免堆栈溢出的一种常见方法是声明自己的堆栈并使用循环,但在这种情况下我们已经在使用堆了,这是python内存管理设置的限制吗?
答案 0 :(得分:2)
CPython
用C实现,尽管Python的数据是从堆中分配的,但实现中的本机C函数调用层必定使用平台C的堆栈。因此,例如,Python代码中对深度R
的递归调用也会在运行时导致对C实现中至少R
深度的C函数的调用。
因此,它主要与数据无关,而与调用堆栈深度有关。可以以不直接依赖平台C的调用堆栈的方式在C中实现Python。例如,请参见“ Stackless Python”实验。但是,这比较棘手,而且核心CPython实现不太可能会采用这种方法。