【发布时间】:2015-09-21 17:05:40
【问题描述】:
我试图了解将列表作为参数传递给函数时如何处理。所以我做了以下事情:
我初始化了一个列表:
ll = [1,2,3,4]
并定义一个函数:
def Foo(ar):
ar += [11]
我将列表传递给函数:
Foo(ll)
当我打印出来时,我得到了:
print ll # [1, 2, 3, 4, 11] #case(1)
到目前为止一切顺利。
现在我修改了函数以重置列表,使其只有一个元素:
def Foo(ar):
ar = [11]
我想起了语法:
Foo(ll)
当我重新打印它时,它产生了相同的列表:
print ll # [1, 2, 3, 4] # case(2)
我以为列表是作为参考传递的;所以无论我们对函数内部的列表做什么,都会改变从主程序传递的原始函数。所以对于 case(2) 我期待以下结果:
print ll # [11] # case(2) expected result
我错过了什么吗?
【问题讨论】:
-
ar = [11]将名称分配给一个完全不同的对象。如果要替换列表的全部内容,请尝试ar[:] = [11]。 -
我发现您选择的名称和值(
ll和11)令人不安...... -
很抱歉选择了名称和值。