Python 中的遞迴函式在每次呼叫自身時都會建立一個新的名稱空間嗎?
是的,函式呼叫(任何函式呼叫,不僅僅是遞迴呼叫)新建立一個名稱空間。但如果作為引數傳遞,OBJECTS將按引用傳遞。
因此,新名稱空間會獲取此引用的自己的副本,但它仍然引用呼叫函式中相同的物件,如果您更改該物件的內容,您會注意到呼叫函式中的更改。
具體來說,每當直譯器遇到一個函式呼叫時,它都會建立一個框架物件,此物件會被推入框架棧。每次建立框架時,該框架都會賦予其自己的私有名稱空間,其中重新定義框架中的每個變數。
廣告
是的,函式呼叫(任何函式呼叫,不僅僅是遞迴呼叫)新建立一個名稱空間。但如果作為引數傳遞,OBJECTS將按引用傳遞。
因此,新名稱空間會獲取此引用的自己的副本,但它仍然引用呼叫函式中相同的物件,如果您更改該物件的內容,您會注意到呼叫函式中的更改。
具體來說,每當直譯器遇到一個函式呼叫時,它都會建立一個框架物件,此物件會被推入框架棧。每次建立框架時,該框架都會賦予其自己的私有名稱空間,其中重新定義框架中的每個變數。