Python 中的递归函数每次函数自己调用时是否都会创建一个新的名称空间?
是的,函数调用(任何函数调用,不仅是递归函数)都会创建一个新的名称空间。但是,当作为参数给定时,对象会通过引用传递。
因此,新名称空间获得了此引用的副本,但它仍会引用调用函数中的相同对象,如果您更改该对象的内容,您会注意到调用函数中的更改。
更具体地说,每当解释器遇到对函数的调用时,它都会创建一个帧对象,该对象被推送到帧栈中。每次创建一个帧时,该帧都会获得自己的私有名称空间,其中帧中的每个变量都会重新定义。
广告
是的,函数调用(任何函数调用,不仅是递归函数)都会创建一个新的名称空间。但是,当作为参数给定时,对象会通过引用传递。
因此,新名称空间获得了此引用的副本,但它仍会引用调用函数中的相同对象,如果您更改该对象的内容,您会注意到调用函数中的更改。
更具体地说,每当解释器遇到对函数的调用时,它都会创建一个帧对象,该对象被推送到帧栈中。每次创建一个帧时,该帧都会获得自己的私有名称空间,其中帧中的每个变量都会重新定义。