首页 > 解决方案 > Python在循环中创建对象将项目附加到同一个列表而不是新列表

问题描述

我有一个在循环内创建对象的代码。该对象有一个包含不同类型对象的列表。

class A:
    a = ''
    def __init__(self):
        pass

class B:
    def __init__(self):
        pass
    list_of_A = list()

for i in range(3):
    _b = B()
    for j in range(2):
        _a = A()
        _b.list_of_A.append(_a)
    print(len(_b.list_of_A))

输出为:2 4 6

我的预期是:2 2 2

我尝试_b在内循环结束时删除。但是没有用。我应该如何确保循环创建 B 的新对象。

标签: pythonlistloopsobject

解决方案


一种方法是创建list_of_A一个实例变量,因此每次创建对象时它都会创建新列表:

class B:
    def __init__(self):
        self.list_of_A = list()   # or = []

当您有以下安排时:

class B:
    def __init__(self):
        pass
    list_of_A = list()

list_of_A由该类的所有对象共享(因为这是一个类变量),因此您要附加到同一个列表对象。


推荐阅读