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``` 参数的值)。