为何类属性(列表)每次运行时持续增长?问题排查求助
问题分析:类属性导致的列表持续增长问题
你定义了如下Python类:
class Seq: values = [] def add(self, value): Seq.values.append(value)
在Jupyter Notebook的第二个单元格执行以下代码:
model = Seq() model.add(1) model.add(2) model.add(3) print(model.values)
首次运行输出正常结果:
[1, 2, 3]
但再次运行该单元格时,列表持续增长:
[1, 2, 3, 1, 2, 3]
再次运行后:
[1, 2, 3, 1, 2, 3, 1, 2, 3]
请问哪里操作有误?
问题根源
你把values定义成了类属性,而非实例属性。类属性是所有类实例共享的资源,不管创建多少个Seq对象,它们都会共用同一个values列表。每次运行单元格时,虽会创建新的Seq实例,但调用add方法时,都是往同一个类级别的列表里追加元素,因此列表会不断增长。
修正方案
将values改为实例属性,在类的__init__方法中初始化:
class Seq: def __init__(self): self.values = [] # 每个实例拥有独立的列表 def add(self, value): self.values.append(value)
这样每次创建Seq实例时,都会生成一个全新的空列表。多次运行单元格时,新实例会使用自己的独立列表,不会与之前的实例共享数据,也就不会出现列表持续增长的问题。
内容的提问来源于stack exchange,提问作者Stephen Anyanwu
相关产品推荐
相关产品推荐

