Python使用append()循环追加临时列表到空列表结果异常如何解决
问题原因
Python中的列表属于可变对象,你代码里每次执行sub.append(temp)时,实际存入sub的是temp列表的内存引用,而非当前时刻temp的独立副本。后续你修改temp列表的内容时,所有指向该内存地址的引用都会同步返回修改后的值,所以最终sub里的所有元素都会和最终版的temp保持一致,这个现象不是bug,是Python的正常对象引用机制。
正确实现方案
写法1:基于原逻辑修改,追加临时列表的浅拷贝
每次往sub里添加元素时,生成当前temp的独立副本存入即可,修改后的代码如下:
num = [4, 1, 8, 2] temp = [] sub = [] for item in num: temp.append(item) sub.append(temp.copy()) # 改为追加temp的浅拷贝
你也可以用切片写法temp[:]替换temp.copy(),二者实现的浅拷贝效果完全一致。
写法2:更简洁的列表推导式写法
如果不需要保留中间temp变量,还可以用更精简的写法直接生成目标列表:
num = [4, 1, 8, 2] sub = [num[:i+1] for i in range(len(num))]
两种写法运行后sub的结果都是你期望的[[4], [4, 1], [4, 1, 8], [4, 1, 8, 2]]。
内容的提问来源于stack exchange,提问作者nima
相关产品推荐
相关产品推荐

