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

Python两次调用函数时首次返回列表覆盖第二次传入零矩阵如何解决

问题原因
  • 核心错误是可变对象的引用重复绑定:你在初始化矩阵的循环里,每轮只创建了1个b列表,然后同时把这个b追加给了a、c、result三个矩阵。Python中列表是可变引用类型,这就导致三个矩阵的每一行都指向同一个内存地址的列表,修改任意一个矩阵的元素,另外两个都会同步变化。
  • 你第一次调用entery(n,a)修改a的元素时,c和result的元素已经被同步修改,所以第二次调用传入的c已经不是初始的零矩阵,等于你两次输入都修改了同一个内存的列表值,最后fm和sm指向的是同一个矩阵。
修复方案

初始化矩阵时,每个矩阵单独创建独立的子列表,不要复用同一个b对象即可解决问题。
可以直接把原来的初始化逻辑替换为更简洁的列表推导式:

a = [[0]*n for _ in range(n)]
c = [[0]*n for _ in range(n)]
result = [[0]*n for _ in range(n)]

如果要保留原循环写法,就给每个矩阵单独写初始化循环:

# 创建a矩阵
a = []
for i in range(n):
    b =[]
    for j in range(n):
        b.append(0)
    a.append(b)
# 创建c矩阵
c = []
for i in range(n):
    b =[]
    for j in range(n):
        b.append(0)
    c.append(b)
# 创建result矩阵
result = []
for i in range(n):
    b =[]
    for j in range(n):
        b.append(0)
    result.append(b)

额外优化点:entery函数不需要写return逻辑,因为传入的列表是可变对象,函数内修改会直接作用到原对象上,保留return也不会影响运行,只是没有必要。

修复后效果

输入n=2,第一次输入11、22、33、44赋值给a矩阵,第二次输入12、23、34、45赋值给c矩阵,最终相加结果会是[[23, 45], [67, 89]],符合矩阵加法的预期逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 03:57:06