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

Python列表赋值疑问:为何单个元素赋值引发两处突变?

问题原因分析

你遇到的问题核心在于Python中列表乘法的引用特性:

  • 当执行[[0] * cols] * rows时,[0] * cols确实会创建一个包含cols个0的列表,但* rows并没有生成rows个独立的新列表,而是把同一个列表对象的引用重复了rows次。也就是说,grid里的每一行其实都指向内存中的同一个列表。
  • 所以当你修改grid[0][1] = 1时,本质是修改了那个被所有行共享的底层列表,自然所有行的第1个索引位置(索引从0开始)都会变成1。
正确的二维列表创建方式

要生成每行独立的二维列表,应该使用列表推导式:

rows = 2
cols = 2
grid = [[0] * cols for _ in range(rows)]
grid[0][1] = 1
print(grid)  # 输出 [[0, 1], [0, 0]]

这里的for _ in range(rows)会循环rows次,每次都重新执行[0] * cols创建一个新的列表,确保每行都是独立的对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 08:32:17