Python"奇怪"的输出

Pra*_*are 2 python

class Foo(object):
    def __init__(self,x):
        self.x = x
        self.is_bar = False
    def __repr__(self): return str(self.x)

class Bar(object):
    def __init__(self,l = []):
        self.l = l
    def add(self,o):
        self.l += [o]
    def __repr__(self): return str(self.l)

def foo_plus_foo(f1,f2):
    t = Bar()
    if not (f1.is_bar and f2.is_bar):
        f1.is_bar = True
        f2.is_bar = True
        t.add(f1)
        t.add(f2)
        print 'HERE'
    return t

if __name__ == '__main__':
    li = [Foo(1), Foo(2)]
    print foo_plus_foo(li[0],li[1])
    print foo_plus_foo(li[0],li[1])
Run Code Online (Sandbox Code Playgroud)

意想不到的输出:

HERE
[1, 2]
[1, 2]
Run Code Online (Sandbox Code Playgroud)

预期产量:

HERE
[1, 2]
[]
Run Code Online (Sandbox Code Playgroud)

怎么了?我做错了什么?为什么python使用旧值?我该怎么做才能避免这种情况?

谢谢!

S.L*_*ott 5

决不.做.这个.

def __init__(self,l = []):
Run Code Online (Sandbox Code Playgroud)

决不.

一个list对象被重用.并且它是可变的,因此每次重用时,[]都会更新在方法定义中创建的唯一的.

总是.做.这个.

def __init__( self, l= None ):
    if l is None: l = []
Run Code Online (Sandbox Code Playgroud)

这创建了一个全新的,独特的列表实例.