Python中类对象数组赋值时全部索引被覆盖的问题求助
问题根源
你所有索引被覆盖的核心原因是:全程复用同一个work类实例。列表daylist里的每个元素都是指向这个唯一对象的引用,每次循环修改work的属性时,所有引用该对象的列表元素都会同步更新,最终所有索引都会显示最后一次修改的属性值。
修复方案
每次处理新的日期和PPV数据时,创建一个全新的work类实例,确保每组数据对应独立的对象,而非复用同一个引用。
修改后的代码示例
# 先定义你的Work类(假设你之前的类结构如下) class Work: def __init__(self): self.date = "" self.lpv = 0.0 self.tpv = 0.0 self.vpv = 0.0 count = 0 daylist = [] # 推荐用append动态添加,避免预先初始化的长度问题 for line in modified: if line.startswith('Date'): # 遇到新日期时,创建新的Work实例 work = Work() output.append(line) list2 = line.split(' ') work.date = list2[1] if line.startswith('PPV'): output.append(line) list1 = line.split(' ') # 将字符串转为浮点数,符合你存储浮点数的需求 work.lpv = float(list1[2]) work.tpv = float(list1[3]) work.vpv = float(list1[4]) # 将新实例存入列表 daylist.append(work) # 如果是预先固定长度的列表,替换为 daylist[count] = work print(count, daylist[count].date) count += 1
关键说明
- 每次触发
Date行时,新建Work实例,保证后续PPV数据绑定到独立对象上。 - 把
list1中的字符串转为浮点数,匹配你“类对象包含字符串和若干浮点数”的需求。 - 用
append管理列表更灵活,若必须用预先初始化的列表,直接赋值daylist[count] = work即可,核心是每次赋值的都是新实例。
内容的提问来源于stack exchange,提问作者ian
相关产品推荐
相关产品推荐

