Python循环修改列表后append结果不符合预期问题求助
问题根源
Python 中列表属于可变对象,你执行weights.append(w)时,实际追加的是列表w的内存引用,而非当前w的内容副本。
整个循环过程中你修改的都是同一块内存地址中的列表数据,最终weights里存储的10个元素全部指向同一个w对象,所以所有元素都会显示为最后一次修改后的[50,50,50,50,50,50,50],和预期不符。
修复方案
只需要在append时追加w的浅拷贝即可,常用的拷贝写法有两种:
- 列表切片拷贝:
weights.append(w[:]) - 构造函数拷贝:
weights.append(list(w))
修改后的完整代码:
w = [100,100,100,100,100,100,100] epochs = 10 weights = [] for j in range(epochs): for i in range(len(w)): w[i] = w[i] - 5 weights.append(w[:])
运行后即可得到你预期的输出结果。
内容的提问来源于stack exchange,提问作者Sanu
相关产品推荐
相关产品推荐

