nos*_*nos 0 python arguments function
伙计们,我有一个关于将可变对象传递给函数的问题
使用以下代码,我期望输出为[0,0,0],而输出为[0,1,2,3]
这是否意味着参数实际被复制然后发送到函数内部?
def lala(a):
n = [0, 0 , 0]
a = n
a = [0,1,2,3]
lala(a)
print a
Run Code Online (Sandbox Code Playgroud)
如果我想在函数内部完成上述任务,我该如何优雅地编写它?
非常感谢!
如果您考虑将名称标签附加到对象,而不是将对象填充到命名框中,Python会更有意义.
def lala(a):
n = [0, 0 , 0]
a = n
Run Code Online (Sandbox Code Playgroud)
这是正在发生的事情.
a.n.n其他名称命名的列表a.a并且n,是局部的lala作用,所以他们"过期"当函数结束.换句话说,a不是可以放入新列表的框.这是您给出的名单的名称.稍后,您将该名称重新分配给您也已命名的列表n.
其他人建议使用切片分配,a[:] = n它使用对列表中项目的引用而不是列表本身.执行此操作时,名称a仍指向相同的列表; 它的内容刚刚被取代.由于它是传递给函数的相同列表,因此在函数外部知道的任何名称都将"看到"新内容.