python函数变量范围

时间:2013-10-05 21:37:54

标签: python list function scope append

在运行下面的函数之前,l1是一个空列表,但为什么运行该函数后它是[1,2,3]?

def copylist(lsource, ldest):
    for e in lsource:
        ldest.append(e)
    print 'ldest =',ldest


l1 = []
l2 = [1, 2, 3]
copylist(l2, l1)
print l1  # displays [1, 2, 3]
print l2  # displays [1, 2, 3]  

4 个答案:

答案 0 :(得分:1)

您似乎期望列表的处理方式与传统值一样,因为它可能是其他语言。 Python参数更像是引用传递,并且因为列表是可变的,所以它完全按照您的要求执行。

你越熟悉Python就会越明显,自然,甚至更方便。

答案 1 :(得分:0)

python通过引用传递对象。这意味着您将元素添加到您传递的实际对象中。

答案 2 :(得分:0)

对于lsource的每个元素,如果它存在于ldest中,那么它将被附加到ldest。因此,l2的所有元素都被复制到(未移动到)l1。

答案 3 :(得分:0)

什么是ldest?这是你传入的任何内容。在这种情况下,你传递了l1ldestl1是相同的列表。因此,您使用什么名称来引用该对象并不重要。