[問題] function 的預設值

看板Python作者 (泡麵)時間11年前 (2014/12/17 22:07), 編輯推噓0(006)
留言6則, 2人參與, 最新討論串1/2 (看更多)
今天在練習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
這跟 function 預設值只會初始一次比較有關
12/17 23:12, 1F

12/17 23:18, , 2F
int 在 Python 中是 immutable 所以不同值是不同位址
12/17 23:18, 2F

12/17 23:19, , 3F
小的數字會回收利用,所以 id(100) == id(100)
12/17 23:19, 3F

12/17 23:21, , 4F
但大數字 (ex 55669527) 就會是不同 int object
12/17 23:21, 4F

12/17 23:24, , 5F
補充一下,你對賦值的理解我看起來沒問題
12/17 23:24, 5F

12/21 06:14, , 6F
謝謝ccwang大的指導!
12/21 06:14, 6F
文章代碼(AID): #1KaOuGs8 (Python)
討論串 (同標題文章)
文章代碼(AID): #1KaOuGs8 (Python)