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
相关产品推荐
相关产品推荐

