Python 是什么使输出不同?

Python 是什么使输出不同?,python,Python,在功能f2和f3中,输出不同 为什么呢?这似乎是同一个等式 输出 def f1(p): p.extend([4]) def f2(p): p += [4] def f3(p): p = p+ [4] a = [1,2,3] f1(a) print(a) a = [1,2,3] f2(a) print(a) a = [1,2,3] f3(a) print(a) f1anf2变异列表对象a。f3中的操作将创建一个新列表,但不会变异a 如果希望得到相同的结果,则必须从f

在功能f2和f3中,输出不同 为什么呢?这似乎是同一个等式

输出

def f1(p):
    p.extend([4])
def f2(p):
    p += [4]
def f3(p):
    p = p+ [4]

a = [1,2,3]
f1(a)
print(a)

a = [1,2,3]
f2(a)
print(a)

a = [1,2,3]
f3(a)
print(a)

f1
an
f2
变异列表对象
a
f3
中的操作将创建一个新列表,但不会变异
a


如果希望得到相同的结果,则必须从
f3
返回
p
,并将该返回值赋给变量
a
。在
f3
中,您仅在函数的本地名称空间中更改
p
。这就是为什么在调用函数时从函数返回值并将其分配给某个变量通常是安全的。在这种情况下,尝试在每个函数中添加
return p
,自己看看会发生什么。您将看到
每个函数调用将返回[1,2,3,4],但在最后一个函数调用中,即在f3中,a不会发生变异。要更正这一点,您可以覆盖
a
或分配给其他变量,如
b
,并使用
a=f3(a)打印它们;打印(a)
b=f3(a);打印(b)
[1, 2, 3, 4]
[1, 2, 3, 4]
[1, 2, 3]