Possible Duplicate:
“Least Astonishment” in Python: The Mutable Default Argument
有人能解释一下下面这种奇怪的行为吗?
我有以下课程:
class Zoo:
def __init__(self,alist=[]):
self.animals = alist
def __len__(self):
return len(self.animals)
def add(self,a):
self.animals.append(a)
当我做以下事情时
In [38]: z=Zoo()
In [39]: z.add(2)
In [40]: z.add(23)
In [41]: len(z)
Out[41]: 2
In [42]: z2=Zoo()
In [43]: len(z2)
Out[43]: 2
为什么z2.动物不是空名单?
谢谢,马蒂亚斯
对于所有实例,默认参数列表都是相同的对象,因此将其分配给成员只是将引用分配给相同的对象。
下面是一个例子:
您可以看到
x
在所有实例中都是相同的对象。您正在更改构造函数中的默认参数(您只是将对同一列表的引用复制到每个实例中)。您可以按如下方式解决此问题:
相关问题 更多 >
编程相关推荐