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

Python二维列表赋值异常:为何无法按预期完成赋值?

Python列表赋值不符合预期的问题解析

问题代码

a=[[1],[2,3],[4,5,6]]
dp=[[0]*3]*3
dp[0][0]=a[0][0]
for i in range(1,3):
    for j in range(0,len(a[i])):
        if j==0:
            dp[i][j]=dp[i-1][j]+a[i][j]
for i in range(3):
    for j in range(3):
        print(dp[i][j])

实际输出

7 0 0
7 0 0
7 0 0

预期输出

1 0 0
3 0 0
7 0 0

问题根源

问题出在dp=[[0]*3]*3这行初始化代码上。这种写法并没有创建3个独立的长度为3的子列表,而是创建了1个长度为3的列表,然后让dp的3个元素都指向这个列表的引用。也就是说,dp[0]、dp[1]、dp[2]是同一个列表对象的别名,修改其中任意一个子列表的元素,另外两个都会跟着变化。

直观来说:当你执行dp[1][0] = dp[0][0]+2时,因为dp[1]和dp[0]指向同一个列表,这行代码同时把dp[0][0]改成了3;接着循环到i=2时,dp[2][0] = dp[1][0]+4,此时dp[1][0]已经是3,计算后得到7,这又会同时把dp[0][0]和dp[1][0]都改成7,最终所有子列表的第一个元素都是7。

解决方法

改用列表推导式初始化dp,确保每个子列表都是独立的对象:

a=[[1],[2,3],[4,5,6]]
# 用列表推导式创建独立子列表
dp=[[0]*3 for _ in range(3)]
dp[0][0]=a[0][0]
for i in range(1,3):
    for j in range(0,len(a[i])):
        if j==0:
            dp[i][j]=dp[i-1][j]+a[i][j]
for i in range(3):
    for j in range(3):
        print(dp[i][j])

执行这段代码后,输出就会和预期一致:

1 0 0
3 0 0
7 0 0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 14:22:09