首页 > 解决方案 > 如何将另一个列表分配给“通过引用”的列表?

问题描述

人们认为python中的列表作为可变对象是通过引用传递的。但是,当我尝试更改传递给要由另一个列表(尤其是空列表)分配的函数的列表时,调用者无法观察到更改。

在这里提供更多细节是我的代码:

def callee(l):
  l = list() # this could be any list but my interest was empty list

def caller():
  l = [1, 2, 3]
  caller(l)
  print(l) # prints [1, 2, 3] while I expect an empty list

如何删除被调用函数中列表的所有元素?

当我在被调用者中更改列表的一个特定元素时,它在调用者中是可见的。这是什么类型的传递,按值调用还是按引用调用?我不相信,我也很欣赏对此的任何澄清。

标签: pythonlistpass-by-reference

解决方案


您只是在 . 范围内重新分配一个局部变量callee。因此,只需更改该列表的内容:

def callee(l):
  l[:] = list()
  # or l.clear()

推荐阅读