对不起这个愚蠢的问题,我是一个新手程序员。但是谁能告诉我为什么下面的程序会这样?
def lol(a):
a=[]
a.append(1)
return a
现在当我做
k = [2, 3]
lol(k)
它返回 1,但k
仍然没有改变?为什么?
非常感谢!
在lol(a)
中,该行a=[]
绑定a
到一个新列表。在此行之后,a
不再与 . 绑定到同一个列表k
。因此,您在函数中实际修改的是一个新列表,而不是您在参数中收到的列表。有关详细信息,请参阅文档。
如果你想k
成为[1]
,那么你可以写这样的东西:
def lol(a):
a[:] = [1]
return a
k = [2, 3]
lol(k) # now k is equal to [1]
检查内联评论..
def lol(a): # a and k are pointing to same memory location
a=[] # Now, new list is created, pointing to different memory address.
a.append(1)
return a # returning new list
k = [2, 3] # New list k is created
lol(k)
如果你打印 k,你会得到 [2,3]。它根本没有被 lol() 改变。