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

为何修改矩阵单个元素会影响整列?Python矩阵赋值异常排查

为啥修改矩阵单个元素整列都变了?这是Python列表引用的经典坑!

兄弟,你碰到的这个问题我刚学Python的时候也踩过!咱们先看你的代码和实际输出:

p = [[0]*3]*3
p[0][0] = 5
for i in p:
    print(i)

输出结果:

[5, 0, 0]
[5, 0, 0]
[5, 0, 0]

问题根源

问题出在[[0]*3]*3这个创建方式上:

  • [0]*3确实生成了一个包含三个0的列表,但后面的*3并没有创建三个独立的新列表——它只是把同一个列表的引用复制了三次。
  • 换句话说,p[0]、p[1]、p[2]指向的是内存里的同一个列表对象!所以你改p[0][0]的时候,其实是在修改那个共享的列表,三个行自然都跟着变了。

解决方法

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

p = [[0]*3 for _ in range(3)]
p[0][0] = 5
for i in p:
    print(i)

这次输出就正常了:

[5, 0, 0]
[0, 0, 0]
[0, 0, 0]

原理很简单:for _ in range(3)循环的每一次,都会重新生成一个[0]*3列表,三个子列表都是完全独立的对象,修改其中一个不会影响其他。

如果你觉得列表推导式有点抽象,也可以用普通循环写,效果完全一样:

p = []
for _ in range(3):
    new_row = [0]*3
    p.append(new_row)

小提醒

Python里的可变对象(比如列表、字典)赋值时,传递的是引用不是副本,以后碰到类似的奇怪问题,先想想是不是不小心共享了同一个对象的引用哦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:46:27