亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

意外的結果樹遍歷 - Python

意外的結果樹遍歷 - Python

Smart貓小萌 2023-06-06 17:19:55
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],因為那樣您將再次使原始列表靜音。


查看完整回答
反對 回復 2023-06-06
  • 1 回答
  • 0 關注
  • 119 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號