关于list:python函数变量范围

python function variable scope

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

1
2
3
4
5
6
7
8
9
10
11
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]


似乎您希望列表的处理方式与传递值类似,因为它可能使用其他语言。python参数更像是按引用传递,由于列表是可变的,所以它完全按照您的要求执行。

对python越熟悉,它就越明显、自然,甚至更方便。


什么是ldest?这是你传进来的东西。在这种情况下,您通过了l1ldestl1是同一个列表。因此,使用什么名称来引用对象并不重要。


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


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