Python 中的递归函数在每次调用自身时都会创建一个新的命名空间吗?
是的,函数调用(任何函数调用,不仅仅是递归调用)新创建一个命名空间。但如果作为参数传递,OBJECTS将按引用传递。
因此,新命名空间会获取此引用的自己的副本,但它仍然引用调用函数中相同的对象,如果您更改该对象的内容,您会注意到调用函数中的更改。
具体来说,每当解释器遇到一个函数调用时,它都会创建一个框架对象,此对象会被推入框架栈。每次创建框架时,该框架都会赋予其自己的私有命名空间,其中重新定义框架中的每个变量。
广告
是的,函数调用(任何函数调用,不仅仅是递归调用)新创建一个命名空间。但如果作为参数传递,OBJECTS将按引用传递。
因此,新命名空间会获取此引用的自己的副本,但它仍然引用调用函数中相同的对象,如果您更改该对象的内容,您会注意到调用函数中的更改。
具体来说,每当解释器遇到一个函数调用时,它都会创建一个框架对象,此对象会被推入框架栈。每次创建框架时,该框架都会赋予其自己的私有命名空间,其中重新定义框架中的每个变量。