如何通过引用传递列表?

Kai*_*ais 5 python pass-by-reference

我想实现一个功能的"添加",结合列表L1L2L3:

def add(L1,L2,L3):
    L3 = L1 + L2

L3 = []
add([1],[0],L3)
print L3
Run Code Online (Sandbox Code Playgroud)

上面的代码生成一个空列表而不是[1,0]- 这意味着L3没有通过引用传递.

如何L3通过参考传递?

che*_*ner 7

列表已经通过引用传递,因为所有 Python名称都是引用,列表对象是可变的.使用切片分配而不是正常分配.

def add(L1, L2, L3):
    L3[:] = L1 + L2
Run Code Online (Sandbox Code Playgroud)

但是,这不是编写函数的好方法.您应该只返回组合列表.

def add(L1, L2):
    return L1 + L2

L3 = add(L1, L2)
Run Code Online (Sandbox Code Playgroud)

  • “使用切片分配而不是正常分配。” 那么为什么正常的分配不起作用呢? (2认同)
  • 因为“L1 + L2”创建了一个新的列表对象,该对象被分配给“L3”,而不是替换“L3”已引用的列表的*元素*。在许多情况下,这可能并不重要,但 OP 特别询问他们期望更新现有列表的情况。 (2认同)

Ste*_*uch 5

你可以用:

L3[:] = L1 + L2
Run Code Online (Sandbox Code Playgroud)

测试代码:

def add(L1, L2, L3):
    L3[:] = L1 + L2

L3 = []
add([1], [0], L3)
print(L3)
Run Code Online (Sandbox Code Playgroud)

结果:

[1, 0]
Run Code Online (Sandbox Code Playgroud)