python将参数传递给函数

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)

如果我想在函数内部完成上述任务,我该如何优雅地编写它?

非常感谢!

kin*_*all 8

如果您考虑将名称标签附加到对象,而不是将对象填充到命名框中,Python会更有意义.

def lala(a):
    n = [0, 0 , 0]
    a = n
Run Code Online (Sandbox Code Playgroud)

这是正在发生的事情.

  1. 您正在接收参数(在本例中为列表)并为其指定名称a.
  2. 您正在创建一个新列表并为其命名n.
  3. 您将给出您为n其他名称命名的列表a.
  4. 两个人的名字,a并且n,是局部的lala作用,所以他们"过期"当函数结束.
  5. 您在函数中创建的列表现在没有名称,Python会丢弃它.

换句话说,a不是可以放入新列表的框.这是您给出的名单的名称.稍后,您将该名称重新分配给您也已命名的列表n.

其他人建议使用切片分配,a[:] = n它使用对列表中项目的引用而不是列表本身.执行此操作时,名称a仍指向相同的列表; 它的内容刚刚被取代.由于它是传递给函数的相同列表,因此在函数外部知道的任何名称都将"看到"新内容.