好的,所以这让我整天疯狂。
为什么会发生这种情况:
class Foo:
def __init__(self, bla = {}):
self.task_defs = bla
def __str__(self):
return ''.join(str(self.task_defs))
a = Foo()
b = Foo()
a.task_defs['BAR'] = 1
print 'B is ==> %s' % str(b)
print 'A is ==> %s' % str(a)
给我输出:
B is ==> {'BAR': 1}
A is ==> {'BAR': 1}
我知道它与python通过引用传递所有东西有关。
但为什么会这样呢?这实际上让我整日疯狂,基本上让我把我的东西拆开了。难道python不应该足够聪明来处理这样的事情吗?
答案 0 :(得分:6)
由于bla
最初在参数中设置为可变类型(在本例中为dict),因此bla
不会重新初始化为每个实例的新dict实例为Foo
创建。在这里,试试这个:
class Foo:
def __init__(self, bla=None):
if bla is None:
bla = {}
self.task_defs = bla
def __str__(self):
return ''.join(str(self.task_defs))
a = Foo()
b = Foo()
a.task_defs['BAR'] = 1
print 'B is ==> %s' % str(b)
print 'A is ==> %s' % str(a)