python shell 在 运行 这段代码时崩溃

The python shell crashs when running this code

我运行这个代码没有成功。

import sys

sys.setrecursionlimit(2147483647)
Gi = 0

def recur():
    global Gi
    Gi = Gi + 1
    recur()

recur()
print(Gi)
input()

我知道改变递归限制是不好的,但是我从没想过这会导致 Shell 崩溃。有人知道为什么吗?

每执行一次recur,就会在其中执行另一个recur。当您这样做时,它会不断地添加到调用堆栈中,直到达到系统的内存限制。当它达到该限制时,它将因堆栈溢出而崩溃。

documentation for sys.setrecursionlimit具体说:

This limit prevents infinite recursion from causing an overflow of the C stack and crashing Python.

The highest possible limit is platform-dependent. A user may need to set the limit higher when they have [...] a platform that supports a higher limit. This should be done with care, because a too-high limit can lead to a crash.

我觉得这很清楚。如果将值设置得太高,可能会崩溃 Python。请注意,文档特别提到崩溃 Python,意思是 Python 解释器,而不仅仅是崩溃 你的程序 .

在 Linux 系统上,您可以使用 ulimit -s 命令更改操作系统堆栈(递归)限制。 ulimit -s unlimited 将提高操作系统对堆栈大小的限制,但您仍然可以通过递归引发崩溃,直到超出计算机中的可用物理内存。