python - 如何将另一个列表分配给“通过引用”的列表?
问题描述
人们认为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
如何删除被调用函数中列表的所有元素?
当我在被调用者中更改列表的一个特定元素时,它在调用者中是可见的。这是什么类型的传递,按值调用还是按引用调用?我不相信,我也很欣赏对此的任何澄清。
解决方案
您只是在 . 范围内重新分配一个局部变量callee
。因此,只需更改该列表的内容:
def callee(l):
l[:] = list()
# or l.clear()
推荐阅读
- python - 图像配准/对齐和转换如何在像素级别上工作?
- mysql - ERPNext OperationalError (2003, "Can't connect to MySQL server on u'localhost' ([Errno 22] Invalid argument)")
- html - 如何使文本框中的文本影响代码?
- c# - 为什么单元测试仍然没有像调试它移动到数据访问层时那样被嘲笑
- dart - 为颤振更新 dart sdk
- gcc - 在 clang 或 gcc 中使用线程清理器时是否需要使用 -fopenmp
- amazon-web-services - 如何过滤NULL?
- javascript - 如何获取输入字段的值并将其存储在数组中
- javascript - 打开网站的多个选项卡后,IIS Webserver 冻结
- nodemcu - NodeMCU - 在 ESP32 上启用 UART1/2