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

Python for循环生成矩阵存入列表后所有值相同问题求解

问题核心原因
  • numpy数组是可变对象,你在循环外初始化的gen_res是固定内存地址的数组,每次循环只是修改这个地址上存储的数值,调用append()往列表里添加的是同一个内存地址的引用,没有存实际的数值快照。因此当最后一次循环修改完gen_res的值后,列表里所有指向这个地址的元素都会同步显示最后一次的结果。
  • 额外注意你原代码的缩进存在问题,append语句的缩进要和内层的for i循环对齐,否则会出现逻辑错误。
两种修复方法

方法1:每次循环创建新数组

把gen_res的初始化逻辑移到p循环内部,每次循环生成独立的新数组,从根源上避免引用复用,修改后代码如下:

import numpy
planning_time = 3
gen_resfinal = []

for p in range(planning_time):
    gen_res = numpy.zeros([30,4])
    for i in range(30):
        for j in range(4):
            gen_res[i,j] = value(m.gen[i,j])
    gen_resfinal.append(gen_res)

方法2:添加时做数组拷贝

如果要保留循环外的gen_res定义,就在每次append时对当前数组做深拷贝,把当前的数值快照存入列表:

import numpy
planning_time = 3
gen_res = numpy.zeros([30,4])
gen_resfinal = []

for p in range(planning_time):
    for i in range(30):
        for j in range(4):
            gen_res[i,j] = value(m.gen[i,j])
    gen_resfinal.append(gen_res.copy())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 22:15:03