在运行下面的函数之前,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]
您似乎期望列表像传递值一样被处理,因为它可能在其他语言中。Python 参数更像是传递引用,并且由于列表是可变的,它完全按照您的要求执行。
你对 Python 越熟悉,这看起来就越明显、自然、甚至方便。
什么ldest
?这是您传入的任何内容。在这种情况下,您传入了l1
. ldest
并且l1
是同一个列表。因此,您使用什么名称来引用该对象并不重要。
对于 lsource 的每个元素,如果它存在于 ldest,那么它将被附加到 ldest。因此,l2 的所有元素都被复制到(而不是移动到)l1。
python 通过引用传递对象。这意味着您将元素添加到您传递的实际对象中。