全局/内部变量冲突? (蟒蛇)

时间:2013-06-08 18:43:33

标签: python variables

抱歉这个愚蠢的问题,我是一名新手程序员。但是有人能告诉我为什么以下程序会这样做吗?

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

现在我做的时候

k = [2, 3]
lol(k)

它返回1,但k仍未改变?为什么呢?

非常感谢!

2 个答案:

答案 0 :(得分:5)

lol(a)中,行a=[]a绑定到新列表。在此行之后,a不再与k绑定到相同的列表。因此,您在函数中实际修改的是新列表,而不是您在参数中收到的列表。有关详细信息,请see the docs

如果您希望k[1],那么您可以写下这样的内容:

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

k = [2, 3]
lol(k) # now k is equal to [1]

答案 1 :(得分: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()改变。