首页 > 解决方案 > Why doesn't the function change it's argument?

问题描述

def func(l):
    l = l + l
    return ()
lst = [22, 33, 13]
func(lst)
print(lst)

The output is [22, 33, 13]. Why is it not [22, 33, 13, 22, 33, 13]?

标签: python

解决方案


在函数内部,您将引用l指向一个新的列表对象l + l。外部引用lst仍然指向原始列表对象。

如果函数修改了列表对象本身,例如通过附加到它,您将在函数结束后看到效果。

def func(l):
    l.append(42)
    print(l)
    return () # Not really needed.

lst = [22, 33, 13]
func(lst)
print(lst)

如果您想获得所需的结果,请尝试使用 listextend方法。

def func(l):
    l.extend(l)

lst = [22, 33, 13]
func(lst)
print(lst) # prints [22, 33, 13, 22, 33, 13]

推荐阅读