有人可以解释下面发生了什么吗?为什么对象b
具有对象a
列表的值?
class Test:
def __init__(self, A = []):
self.A = A
def __str__(self):
return str(self.A)
def mutate_A():
a = Test()
a.A.append(1)
return a
def problem_here():
a = mutate_A()
b = Test()
print b # why does this print [1] in python 2.7
problem_here()
如果我不清楚或需要更多信息,请告诉我。谢谢。
答案 0 :(得分:1)
因为在python中,默认参数仅计算一次(定义函数时)。因此,该类的所有实例都使用相同的列表A
但是,如果您希望每个实例都有自己的列表,那么您应该这样做:
def __init__(self):
self.A = []
>>> a = mutate_A()
>>> b = Test()
>>> print b
[]