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

Python:for循环设置多维数组元素仅生效最后值的问题

问题分析与解决

问题根源

你遇到的问题出在数组初始化的方式上:

arr = [[0, 0]] * 2

这行代码并没有创建两个独立的[0, 0]子列表,而是让arr中的两个元素指向同一个列表对象。也就是说,arr[0]和arr[1]是同一个列表的引用,修改任意一个,另一个都会同步变化。

循环过程拆解

  • 当i=0时,执行arr[0][1] = 0,此时共享的子列表变为[0, 0],arr呈现为[[0,0], [0,0]];
  • 当i=1时,执行arr[1][1] = 1,因为两个元素指向同一个列表,共享的子列表被修改为[0,1],最终arr的两个元素都会显示为[0,1]。

循环内打印"正确"的原因

循环内每次修改后立即打印arr[i][1],其实是在打印当前时刻共享列表的状态:

  • i=0时,共享列表是[0,0],打印出0;
  • i=1时,共享列表被修改为[0,1],打印出1。
    但这只是临时状态,循环结束后,共享列表的最终状态是[0,1],所以两个元素都会显示这个结果。

解决方案

用列表推导式创建独立的子列表,确保每个子列表都是单独的对象:

arr = [[0, 0] for _ in range(2)]
num = len(arr)

for i in range(num):
    arr[i][1] = i
    
print(arr)  # 输出 [[0, 0], [0, 1]],符合预期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 20:12:10