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

为何修改二维列表result[0][0]时所有子列表对应位置均被修改?

问题原因分析

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

  • 你先创建了一个列表l = [0,0,0],然后连续三次把l添加到result中。这时候result里的三个元素并不是三个独立的列表,而是指向同一个列表对象的引用。
  • 当你执行result[i][j] = num修改其中一个子列表的元素时,实际上是在修改那个被共享的列表对象,所以所有指向它的引用(也就是result里的三个子列表)都会显示出这个修改。

验证方式

你可以打印每个子列表的内存地址来确认:

result=[]
l=[]
n=3
for _ in range(n):
    l.append(0)
for _ in range(n):
    result.append(l)
# 打印每个子列表的id
for sub in result:
    print(id(sub))

输出的三个id会完全相同,证明它们是同一个对象。

解决方法

要让每个子列表都是独立的对象,需要每次添加时创建新的列表,比如:

  1. 每次循环生成新列表:
result=[]
n=3
for _ in range(n):
    # 每次循环创建一个新的全0列表
    result.append([0]*n)
  1. 或者复制已有列表的副本:
result=[]
l=[]
n=3
for _ in range(n):
    l.append(0)
for _ in range(n):
    # 添加l的副本,而非原引用
    result.append(l.copy())

这样修改result[0][0]时,就只会影响第一个子列表,其他子列表不受影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 05:25:31