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

numpy.array存储自定义类对象时所有元素值相同的问题如何解决

问题原因

你在循环外仅实例化了1个value类对象val,后续循环中调用initialize方法都是修改这同一个对象的属性,numpy数组存储的是该对象的引用,因此数组所有位置的元素都指向同一个内存地址的对象,最终所有元素的属性都会和最后一次修改的属性保持一致。该问题属于Python对象引用的通用逻辑问题,和numpy数组本身无关,用普通Python列表做同样操作也会出现相同异常。

修复方案

每次循环都创建新的value类实例即可,修改后的完整代码如下:

import numpy as np

class value:
  def store(self,jobid,deadline,profit):
    self.job = jobid
    self.deadline = deadline
    self.profit = profit

  def initialize(self):
    job = input()
    deadline = int(input())
    profit= int(input())
    self.store(job,deadline,profit)


def disp(arr,n):
  for i in range(n):
    print(str(arr[i].job)+" "+str(arr[i].deadline)+" "+str(arr[i].profit))


n=2
arr = np.array([None for i in range(n)])

for i in range(n):
  # 每次循环新建独立的value实例
  val = value()
  val.initialize()
  arr[i]=val

disp(arr,n)

修改后运行代码即可得到期望输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 15:45:04