1. 程式人生 > >python坑:可變物件作為函式預設值

python坑:可變物件作為函式預設值

別說話,看程式碼:

>>> def aa(v, l=[]):
...     l.append(v)
...     print(id(l))
...     return l
... 
>>> 
>>> 
>>> aa("h")
4352204880
['h']
>>> 
>>> aa("k")
4352204880
['h', 'k']  # 這不是我想要的結果
>>> 
>>> aa("y")
4352204880
['h', 'k', 'y']  # 這不是我想要的結果

那麼為什麼會出現這樣的結果呢?因為程式碼在執行前需要先去編譯,然後會給這個方法靜態分配儲存空間,當然也會給引數分配儲存空間,也可以從列印引數“l”的儲存空間的id是不變的看的出來。所以,字典,集合,列表等等物件是不適合作為函式預設值的。

我瞬間回憶,以前寫過好多這樣的程式碼,但是好像都沒有出問題啊!!!有麼有這樣的同感~~~ 祈禱我大部分都是傳值了把,啊哈哈哈。

相同的例子:

>>> import time
>>> def ss(t=time.time()):
...     print(id(t))
... 
>>> def ss(t=time.time()):
...
print(id(t)) ... print(t) ... >>> ss() 140544219076712 1500430646.18 >>> >>> ss() 140544219076712 1500430646.18 # 時間引數並沒有變