[問題] function 的預設值
今天在練習function時,發現在不同情況下,
function的預設值會不同
例.
def spam(a,b=40):
print(b)
return b
def spam_2(a,b=[]):
print(b)
return b
//v1
x = spam(1)
x = 100
x = spam(1)
// result : 40 , 40
//v2
x = spam_2(1)
x.append('hello')
x = spam_2(1)
// result : [] , ['hello']
這個結果和我原先想像的不一樣,
後來看memory address的差異時發現,
v1在 x = 100 後, x的memory address和spam回傳的address不同
v2在 x.append('hello')後,x的memory address和spam_2回傳的address相同
我的理解是 python的每個值都是object
賦值是改變address
所以x=40,是把x只向另一個address
而.append是對現有的object做改變
所以x.append('hello'),是更改現在address內的值
想請問大家,這樣的解釋是否正確?還是有其他的解釋呢?
--
Sent from my CASIO fx-991es .
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.116.164.179
※ 文章網址: http://www.ptt.cc/bbs/Python/M.1418825232.A.D88.html
→
12/17 23:12, , 1F
12/17 23:12, 1F
→
12/17 23:18, , 2F
12/17 23:18, 2F
→
12/17 23:19, , 3F
12/17 23:19, 3F
→
12/17 23:21, , 4F
12/17 23:21, 4F
→
12/17 23:24, , 5F
12/17 23:24, 5F
→
12/21 06:14, , 6F
12/21 06:14, 6F
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 1 之 2 篇):
Python 近期熱門文章
PTT數位生活區 即時熱門文章