Python初始化循环中的对象

Python初始化循环中的对象,python,class,object,for-loop,Python,Class,Object,For Loop,这是怎么回事? 我本以为b=a()会创建一个空的类实例 class a: def __init__(self,l=[]): self.l=l for i in range(2): b=a() b.l.append(1) print b.l 结果: [1] [1, 1] 当您将list作为默认参数时,只会创建一次新的list,定义函数后,在每次调用中使用相同的list。要“解决”此问题,您可以执行以下操作: class a: def _

这是怎么回事? 我本以为
b=a()
会创建一个空的类实例

class a:
    def __init__(self,l=[]):
        self.l=l

for i in range(2):
    b=a()
    b.l.append(1)
    print b.l
结果:

[1]
[1, 1]

当您将list作为默认参数时,只会创建一次新的list,定义函数后,在每次调用中使用相同的list。要“解决”此问题,您可以执行以下操作:

class a:
    def __init__(self,l=None):
        if l is None:
            self.l = []
        ...

你可以在这里看到一个很好的解释:

在你的情况下,正确的方法是:

class a:
    def __init__(self, l=None):
        if l is None:
            l = []
        self.l=l

for i in range(2):
    b=a()
    b.l.append(1)
    print b.l

当您在函数参数列表中执行l=[]时,您将声明静态列表(列表对象将只创建一次),因此每次您将新元素附加到同一列表对象时

要为每个新对象创建新的列表对象,您可能需要以下内容:

class A:
    def __init__(self, l=None):
        self.l = l or []

for i in range(2):
    b=A()
    b.l.append(1)
    print b.l
class A:
    def __init__(self, l=None):
        self.l = l or []

for i in range(2):
    b=A()
    b.l.append(1)
    print b.l