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
提交
取消