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

Python二维列表使用*创建后赋值出现非预期结果如何解决

错误核心原因

你遇到的问题本质是Python中可变对象的引用复制机制:

  • 你编写的array = [[0,0]] * 50并没有生成50个独立的[0,0]子数组,只是把同一个[0,0]列表对象的引用复制了50次,整个二维列表所有位置的子数组都指向内存中同一个列表对象。
  • 因此你修改任意位置的子数组元素(比如array[i][0] = 1),本质上都是修改同一个内存对象,自然所有子数组的取值都会同步变化。
  • 你可以通过print(id(array[0]), id(array[1]))验证:用*生成的数组两个子数组的内存地址完全相同。
修正方案

生成包含50个独立子数组的二维列表即可,推荐两种常用写法:

  1. 列表推导式写法(更简洁)
array = [[0, 0] for _ in range(50)]
for i in range(15, 30):
    array[i][0] = 1
  1. 循环追加写法
array = []
for _ in range(50):
    array.append([0, 0])
for i in range(15, 30):
    array[i][0] = 1

两种写法都会为每个子数组单独开辟内存空间,修改单个子数组不会影响其他元素。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 16:27:04