<p>在我使用的实现中,设置</p>
<pre><code>sys.setrecursionlimit(907)
</code></pre>
<p>演示这是您达到的递归深度。你知道吗</p>
<hr/>
<p>对于您的问题,答案是否定的。在CPython的源代码中,您可以看到递归深度是每个线程,而不是每个对象。你知道吗</p>
<p><a href="https://github.com/python/cpython/blob/a3527d7169c091b7e244406a8ae7dd254b69ee1f/Include/pystate.h#L78" rel="nofollow">pystate.h</a>:</p>
<pre><code>typedef struct _ts {
/* See Python/ceval.c for comments explaining most fields */
//...
int recursion_depth;
//...
}
</code></pre>
<p><a href="https://github.com/python/cpython/blob/master/Python/ceval.c#L710" rel="nofollow">ceval.c</a>:</p>
<pre><code>/* the macro Py_EnterRecursiveCall() only calls _Py_CheckRecursiveCall()
if the recursion_depth reaches _Py_CheckRecursionLimit.
If USE_STACKCHECK, the macro decrements _Py_CheckRecursionLimit
to guarantee that _Py_CheckRecursiveCall() is regularly called.
Without USE_STACKCHECK, there is no need for this. */
int
_Py_CheckRecursiveCall(const char *where)
{
PyThreadState *tstate = PyThreadState_GET();
//...
if (tstate->recursion_depth > recursion_limit) {
tstate->recursion_depth;
tstate->overflowed = 1;
PyErr_Format(PyExc_RecursionError,
"maximum recursion depth exceeded%s",
where);
return -1;
}
//...
}
</code></pre>
<p><code>tstate</code>是线程状态的简写。你知道吗</p>