【发布时间】:2019-05-23 05:19:57
【问题描述】:
相信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
如何删除被调用函数中列表的所有元素?
当我在被调用者中更改列表的一个特定元素时,它在调用者中是可观察的。这是什么类型的传递,按值调用还是按引用调用?我不相信,我也很感激对此的任何澄清。
【问题讨论】:
-
This answer 可能涵盖您正在寻找的内容。
-
强烈推荐阅读nedbatchelder.com/text/names.html 问题是“作业”会覆盖您之前发送的任何内容。如果你想改变原始对象,你必须使用对象的方法,例如
l.clear()
标签: python list pass-by-reference