1

对不起这个愚蠢的问题,我是一个新手程序员。但是谁能告诉我为什么下面的程序会这样?

def lol(a):
    a=[]
    a.append(1)
    return a

现在当我做

k = [2, 3]
lol(k)

它返回 1,但k仍然没有改变?为什么?

非常感谢!

4

2 回答 2

5

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]
于 2013-06-08T18:45:46.103 回答
0

检查内联评论..

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() 改变。

于 2013-06-08T18:48:57.440 回答