这个问题在这里已有答案:
目前python的递归深度为1000但我无法理解为什么存在限制,因为堆中的所有内容都存在。
Python中的内存管理涉及包含所有Python对象和数据结构的私有堆。 Python内存管理器在内部确保对此私有堆的管理
避免stackoverflow的常用方法是声明自己的堆栈并使用循环但在这种情况下我们已经在使用堆。它是python内存管理设置的限制吗? 。
CPython
是用C实现的,虽然Python的数据是从堆中分配的,但实现中的本机C函数调用层必然使用平台C的堆栈。因此,例如,Python代码中深度R
的递归调用也会在运行时导致在C实现中调用深度至少为R
的C函数。
所以它主要不是关于数据,而是关于调用堆栈的深度。可以用C语言实现Python,而不是直接依赖于平台C的调用栈。例如,请参阅“Stackless Python”实验。但这更棘手,核心CPython实现不太可能采用这种方法。