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

Python二维列表赋值后二次打印全变为最后一行值,是什么原因?

问题根因

你代码里二维列表的初始化方式存在逻辑错误:
lineData = [[0.0] * numPix] * numLines 这行代码并没有创建numLines个独立的子列表,只是把同一个子列表的引用复制了numLines次,整个lineData里的所有行都指向内存中完全相同的一个列表对象。
所以你每次修改lineData[r][p]的时候,本质上都是修改那个共享的子列表,所有行的对应位置会同步更新。

首次打印正常的原因

你首次打印是在每一个元素赋值完成后立刻输出的,此时共享子列表刚被修改为当前行的数值,所以打印出来的内容符合你当时的赋值预期。但当你处理下一行数据时,共享子列表又会被覆盖为新的行数值,之前行的内容也会同步被修改。
等所有行处理完毕后,共享子列表的内容已经被最后一行的数值覆盖,此时你第二次遍历打印所有行,自然所有行的内容都和最后一行完全一致。

正确的二维列表初始化方式

改用列表推导式生成独立的子列表即可:

lineData = [[0.0 for _ in range(numPix)] for _ in range(numLines)]

这种写法每次循环都会创建新的子列表,各个行之间完全独立,修改任意一行不会影响其他行的内容。

内容的提问来源于stack exchange,提问作者Tam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 04:27:01