这里发生了什么?
我原以为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]
答案 0 :(得分:2)
当您将列表作为默认参数时,只创建一个新列表,当定义该函数时,每次调用都会使用相同的列表。要解决问题"你可以这样做:
class a:
def __init__(self,l=None):
if l is None:
self.l = []
...
答案 1 :(得分:0)
你可以在这里阅读一个很好的解释:http://effbot.org/zone/default-values.htm
>>> def function(data=[]):
... data.append(1)
... return data
...
>>> function()
[1]
>>> function()
[1, 1]
>>> function()
[1, 1, 1]
在你的情况下正确的方法:
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
答案 2 :(得分:0)
当您在函数参数列表中执行 l = [] 时 - 您声明静态列表(列表对象将只创建一次),因此每次添加新元素时相同的列表对象。
您可能需要这样的东西来为每个新的A对象创建新的列表对象:
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