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

Anaconda Spyder中二维列表赋值异常问题求助

问题根源:二维列表的错误初始化方式

你遇到的这个bug其实是Python中创建二维列表时的一个经典陷阱——用*重复子列表的时候,所有子列表其实都是同一个列表对象的引用。

为什么会出现这个问题?

看你初始化A的代码:

A = [[0]*self.d1] * self.d2

这里[0]*self.d1会创建一个包含self.d1个0的列表,然后* self.d2只是把这个列表的引用重复了self.d2次。也就是说,A里的每一个A[i]指向的都是同一个列表。所以当你执行A[i][j] = self.image[j][i]时,你其实是在修改那个唯一的子列表,自然所有A[i][j]都会跟着变。

怎么修复?

你需要用列表推导式来创建二维列表,这样每一个子列表都是独立的新对象:

A = [[0]*self.d1 for _ in range(self.d2)]

这个写法会循环self.d2次,每次都创建一个新的[0]*self.d1列表,这样A里的每个子列表都是独立的,修改其中一个不会影响其他。

修复后的完整代码

把你的transp_image方法改成这样:

def transp_image(self):
    # 用列表推导式创建独立的子列表
    A = [[0]*self.d1 for _ in range(self.d2)]
    for i in range(self.d2):
        for j in range(self.d1):
            A[i][j] = self.image[j][i]
    self.image = A
    k = self.d2
    self.d2 = self.d1
    self.d1 = k

验证一下

比如假设原来的self.image是:

[[0,0,0],
 [0,0,0],
 [1,0,0]]

修复前执行A[0][2] = 1会让所有A[i][2]都变成1,修复后只会让A[0][2]变成1,其他子列表的对应位置不受影响,完全符合你的预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:24:29