デフォルト引数の奇妙な挙動

http://webtech-walker.com/archive/2010/10/13191417.html
を見ていて、ふと疑問に思った。

def foo(x=[]):
    print '--1', x
    if x:
        print '--2', x
        x = []
    x.append(1)
    print x
	
foo()
foo()
foo()

出力:
--1 []
[1]
--1 [1]
--2 [1]
[1]
--1 [1]
--2 [1]
[1]
def foo(x=[]):
    print '--1', x
    if not x:
        print '--2', x
        x = []
    x.append(1)
    print x
	
foo()
foo()
foo()

出力:
--1 []
--2 []
[1]
--1 []
--2 []
[1]
--1 []
--2 []
[1]

後者の例で、2回目のfoo()の呼び出しで、"--1 []"となるのは何故だろう?よく分からない。誰か教えて〜!


追記(2011/8/11):
上記のように分かりづらいスクリプトが書けてしまうので、「デフォルト引数にはミュータブルオブジェクトを使うな」というのが原則かな。