引用或复制python递归变量?

jam*_*abb 5 python recursion

我有以下递归函数,但我无法弄清楚 python 如何处理递归函数中的变量。它会addresses为每次递归创建变量的副本,还是会覆盖变量并造成可怕的混乱?

def get_matches():
    addresses = get_addresses()

    #do stuff

    for addr in addresses:
        #do stuff
        if some_condition:
            get_matches()
        else:
            return
Run Code Online (Sandbox Code Playgroud)

Chr*_*ean 5

您正在寻找的下划线概念称为框架

Python 解释器内部是一个栈,通常称为调用栈。每次 Python 在执行过程中遇到函数调用时,都会创建一个新的框架对象并将其压入堆栈。框架代表函数调用。每个都有自己的作用域,以及传递给函数的任何参数的当前值。

这意味着即使对于函数的每次递归调用,也会为该特定函数调用创建一个新框架并将其压入堆栈。正如我上面已经说过的,每个框架都有自己的范围。所以每个框架的范围都有一个address定义在其中的变量,与其他任何一个分开。

但是请注意,框架对象本身不存储变量的。您会看到,Python 解释器仅对堆栈的最顶部帧进行操作。Python 使用与调用堆栈分离的另一个堆栈来存储它当前正在执行的帧的局部变量的值。