self.path我有一個(gè)意想不到的結(jié)果,其中和的值self.path_temp不同,它們唯一不同的方式是一個(gè)由字符串更新,另一個(gè)由列表更新,所有這些都通過函數(shù)作為trav參數(shù)傳遞。列表是否以某種方式持久存在于 python 的內(nèi)存中?正確或詳細(xì)的解釋將不勝感激!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貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超10個(gè)贊
不同之處在于它path
是一個(gè)原始值(一個(gè)字符串)而temp
不是。當(dāng)你做
path += str(root.val)
您實(shí)際上是在創(chuàng)建一個(gè)新字符串。字符串在 Python 中是不可變的。同樣,函數(shù)的調(diào)用者也看不到path
它作為參數(shù)傳遞的變量的任何變化。
這是一個(gè)不同的故事temp
。當(dāng)你做
temp.append(root.val)
...你正在改變temp
列表。這是調(diào)用者作為參數(shù)傳遞的列表,因此調(diào)用者的列表會被此操作改變。在所有的遞歸過程中,有幾個(gè)temp
變量實(shí)例,但它們都引用同一個(gè)列表。Everyappend
影響所有temp
變量實(shí)例。
如果你想temp
表現(xiàn)得像path
,那么你必須創(chuàng)建一個(gè)新列表而不是改變現(xiàn)有列表:
temp = temp + [root.val]
注意:不要將其縮短為temp += [root.val]
,因?yàn)槟菢幽鷮⒃俅问乖剂斜盱o音。
添加回答
舉報(bào)
0/150
提交
取消