意外结果树遍历-Python

问题描述

我有一个意外的结果,其中self.pathself.path_temp的值不同,并且它们唯一不同的唯一方法是一个由字符串更新,另一个由全部通过函数{{ 1}}作为参数。列表是否以某种方式持久保存在python的内存中?正确或详细的解释将不胜感激!

PS:正确的是trav,它是用字符串更新的。

self.path

解决方法

区别在于path是原始值(字符串),而temp不是。当你做

path += str(root.val) 

您实际上是在创建一个新字符串。字符串在Python中是不可变的。同样,该函数的调用者也不会在作为参数传递的path变量中看到任何更改。

temp是另外一个故事。当你做

temp.append(root.val)

...您正在突变temp列表。这是调用方作为参数传递的列表,因此此操作会使调用方的列表发生变化。在所有递归过程中,都有几个temp变量实例,但是它们都引用一个相同的列表。每个append都会影响所有temp个变量实例。

如果您希望temp的行为类似于path,则必须创建一个 new 列表,而不是对现有列表进行变异:

temp = temp + [root.val]

注意:不要将其缩短为temp += [root.val],因为那样的话,您将再次忽略原始列表。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...