self.path我有一個意想不到的結果,其中和的值self.path_temp不同,它們唯一不同的方式是一個由字符串更新,另一個由列表更新,所有這些都通過函數作為trav參數傳遞。列表是否以某種方式持久存在于 python 的內存中?正確或詳細的解釋將不勝感激!PS:正確的是self.pathwhich is updated with the string. def binaryTreePaths(self, root: TreeNode) -> List[str]: self.path = [] temp = [] self.path_temp = [] def trav(root,path,temp): if root: path += str(root.val) temp.append(root.val) if root.right == None and root.left==None: self.path.append('->'.join(path)) self.path_temp.append('->'.join(temp)) trav(root.left,path,temp) trav(root.right,path,temp) trav(root,'',temp) print(self.path) print(self.path_temp)
1 回答

慕哥6287543
TA貢獻1831條經驗 獲得超10個贊
不同之處在于它path
是一個原始值(一個字符串)而temp
不是。當你做
path += str(root.val)
您實際上是在創建一個新字符串。字符串在 Python 中是不可變的。同樣,函數的調用者也看不到path
它作為參數傳遞的變量的任何變化。
這是一個不同的故事temp
。當你做
temp.append(root.val)
...你正在改變temp
列表。這是調用者作為參數傳遞的列表,因此調用者的列表會被此操作改變。在所有的遞歸過程中,有幾個temp
變量實例,但它們都引用同一個列表。Everyappend
影響所有temp
變量實例。
如果你想temp
表現得像path
,那么你必須創建一個新列表而不是改變現有列表:
temp = temp + [root.val]
注意:不要將其縮短為temp += [root.val]
,因為那樣您將再次使原始列表靜音。
添加回答
舉報
0/150
提交
取消