python字符串与列表奇数行为

python字符串与列表奇数行为,python,Python,如果我在二叉树上尝试以下代码片段,然后尝试打印arr和字符串,arr会给出正确的结果,但字符串为空。有什么想法吗?这与通过引用传递列表和通过值传递字符串有关吗 def post_order(root, arr = []): if(root is not None): post_order(root.left, arr) post_order(root.right, arr) arr.append(root.value) def post_

如果我在二叉树上尝试以下代码片段,然后尝试打印arr和字符串,arr会给出正确的结果,但字符串为空。有什么想法吗?这与通过引用传递列表和通过值传递字符串有关吗

def post_order(root, arr = []):
    if(root is not None):
        post_order(root.left, arr)
        post_order(root.right, arr)
        arr.append(root.value)

def post_order1(root, string = ''):
    if(root is not None):
        post_order1(root.left, string)
        post_order1(root.right, string)
        string += str(root.value)

# assume I've made my binary tree
arr, string = [], ''
post_order(root, arr)
post_order1(root, string)
print arr, string
# arr holds the correct post-order sequence
# string is empty

Arr是一个数组,可以扩展它。传递给post_order1的字符串是一个不可变对象,更新时会创建一个副本。因此,原始字符串保持不变。

Arr是一个数组,您可以扩展它。传递给post_order1的字符串是一个不可变对象,更新时会创建一个副本。因此,原始字符串保持不变。

在Python中,列表是可变的,字符串是不可变的。这意味着可以修改列表,但不能修改字符串。只能重新分配字符串


在函数中,您使用
.append()
修改列表,但在Python中,您只是重新分配字符串
+=

,列表是可变的,字符串是不可变的。这意味着可以修改列表,但不能修改字符串。只能重新分配字符串


在函数中,您正在使用
.append()
修改列表,但您只是在重新分配字符串
+=

您应该如下更正代码:

def post_order1(root, string = ''):
    if not root : return string

left  = post_order1(root.left, string)
right = post_order1(root.right, left)
return right + str(root.value)

您应该按照以下方式更正代码:

def post_order1(root, string = ''):
    if not root : return string

left  = post_order1(root.left, string)
right = post_order1(root.right, left)
return right + str(root.value)

字符串是不可变的,因此
string+=str(root.value)
可能没什么作用,您是说在调用post\u order1传递新字符串然后返回它之前执行+=操作吗?我认为,如果一个类将字符串设置为attributeRelated,您可能会过得更好:您没有包含足够的信息。包括您的输入、期望和现有输出。此外,您还应该返回这些函数,以便对变量进行垃圾收集。字符串是不可变的,因此
string+=str(root.value)
可能没有什么作用,您的意思是在调用post\u order1传递新字符串然后返回它之前执行+=吗?我认为,如果一个类将字符串设置为attributeRelated,您可能会过得更好:您没有包含足够的信息。包括您的输入、期望和现有输出。此外,您还应该返回这些函数,以便对变量进行垃圾收集。啊,这很有意义!谢谢布莱恩:)啊,这很有道理!谢谢布莱恩:)我更正了帖子中的代码。谢谢@Danny LiuI更正了帖子中的代码。谢谢你@Danny Liu