Python清空嵌套列表子列表时同步清空原引用列表的方法
问题原因
你之前的写法无法达到预期,核心是Python对象引用的逻辑问题:执行li[i] = []时,本质是给嵌套列表li的对应索引位置重新绑定了一个全新的空列表对象,并没有修改li中原本存储的、和全局变量list_1/list_2指向同一块内存地址的原列表对象,因此外层的list_1、list_2不会被改动。
正确实现方案
要让list_1、list_2同步变为空列表,必须直接对每个子列表对象做原地修改,有两种常用的实现方式:
- 调用列表自带的
clear()方法,语义最清晰:
list_1 = [1, 2, 3] list_2 = ["a", "b", "c"] li = [list_1, list_2] for sub in li: sub.clear()
- 使用切片赋值完成原地清空,效果和
clear()完全一致:
for sub in li: sub[:] = []
效果验证
执行上述代码后打印对应变量,就能得到你期望的结果:
print(li) # Output: [[], []] print(list_1) # Output: [] print(list_2) # Output: []
注:两种写法都是直接修改原列表对象,所有指向该对象的变量都会同步体现变更,完全匹配你的需求。
内容的提问来源于stack exchange,提问作者Darrennn
相关产品推荐
相关产品推荐

