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
相关产品推荐
相关产品推荐

