def extendList(val, list=[]):
list.append(val)
return list
list1 = extendList(10)
list2 = extendList(123,[])
list3 = extendList('a')
print "list1 = %s" % list1 ,
print "list2 = %s" % list2
print "list3 = %s" % list3
許多人會錯誤的認為 <code>list1</code> 應該等于 <code>[10]</code> 以及 <code>list3</code> 應該等于 <code>['a']</code>。認為 <code>list</code> 的參數會在 <code>extendList</code> 每次被調用的時候會被設定成它的預設值 <code>[]</code>。
盡管如此,實際發生的事情是,新的預設清單僅僅隻在函數被定義時建立一次。随後當 <code>extendList</code> 沒有被指定的清單參數調用的時候,其使用的是同一個清單。這就是為什麼當函數被定義的時候,表達式是用預設參數被計算,而不是它被調用的時候。
是以,<code>list1</code> 和 <code>list3</code> 是操作的相同的清單。而 ````list2<code>是操作的它建立的獨立的清單(通過傳遞它自己的空清單作為</code>list``` 參數的值)。