You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 16:39:04