Python嵌套列表扩容后子列表引用重复问题求解
问题解决:扩容包含子列表的主列表时的引用问题
问题原因
Python中列表属于可变对象,使用main_list * 2时,并不会为每个子列表创建新副本,只是直接复制原列表中子列表的引用。这就导致原主列表的第0个子列表和扩容后第4个子列表指向同一个内存对象,修改其中一个,另一个会同步变化。
简便解决方法
方法1:直接生成双倍长度的新主列表
由于你已经清空了所有子列表,最直接的方式是创建包含双倍数量独立空列表的新主列表:
# 简化清空子列表的代码 for a in main_list: a.clear() # 扩容:生成8个独立的空列表 main_list = [[] for _ in range(len(main_list) * 2)]
方法2:复制子列表副本后再扩容
如果后续子列表可能非空(当前场景下已清空,效果和方法1一致),可以先为每个子列表创建副本,再翻倍:
# 清空子列表 for a in main_list: a.clear() # 先复制每个子列表的副本,再翻倍 main_list = [list(sublist) for sublist in main_list] * 2
验证效果
执行main_list[0].append("test")后,打印输出符合预期:
print(main_list) # 输出:[["test"], [], [], [], [], [], [], []]
内容的提问来源于stack exchange,提问作者SERO9
相关产品推荐
相关产品推荐

