Python 是什么使输出不同?
在功能f2和f3中,输出不同 为什么呢?这似乎是同一个等式 输出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
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
anf2
变异列表对象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]