[問題] a+=b VS a = a+b 差異(solved)

看板Python作者 (QQ)時間5年前 (2019/04/04 14:43), 5年前編輯推噓4(403)
留言7則, 5人參與, 5年前最新討論串1/1
原本認為 a+=b 跟 a=a+b 是一樣的東西 但是在函數裡配上int或是list就不一樣了... 【整數】 def f(int): int += 1 def g(int): int = int + 1 a = 0 f(a) print(a) --- a還是0 a = 0 g(a) print(a) --- a還是0 也就是說,f跟g在吃到int後都造一個local variable的變數 a,與原本global a無關 但是在: 【list】 def f(lst): lst += [1] def g(int): lst = lst + [1] a = [0] f(a) print(a) --- a變成[0,1] a = [0] g(a) print(a) --- a還是[0] 總結來說,在【整數】的case下,原本想下一個結論:函數內會自己造local variable 但是在【list】的case下並非如此 如果要說整數跟list在python函數內的運作規則不一樣的話 我也認了 但是list在函數內卻會讓 a+=b跟 a=a+b 不一樣???? 求解惑~~謝謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 59.102.226.184 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1554360190.A.6B3.html

04/04 14:58, 5年前 , 1F
是local沒錯 但物件的話存的是指標
04/04 14:58, 1F
那【lst += [1]】 VS 【lst = lst + [1]】在函數內為什麼不一樣@@?

04/04 15:00, 5年前 , 2F
老問題 list跟dict等物件在function是pass by referenc
04/04 15:00, 2F

04/04 15:00, 5年前 , 3F
e 跟 JS一樣
04/04 15:00, 3F
是指 list 跟 dict 在函數內的 【lst += [1]】 VS 【lst = lst + [1]】 所進行的reference是不一樣的?? ※ 編輯: znmkhxrw (59.102.226.184), 04/04/2019 15:09:05

04/04 15:10, 5年前 , 4F

04/04 15:14, 5年前 , 5F
python是dynamic typing,+=跟=不全然一樣
04/04 15:14, 5F
對!! 就是這個原因 謝拉~ 我剛剛print(id(lst))就知道原因了 lst+= [5]是存在同一個記憶體位置 lst = lst + [5] 已經另外開一個位置存了 ※ 編輯: znmkhxrw (59.102.226.184), 04/04/2019 15:29:11

04/04 20:01, 5年前 , 6F
相關的還有deepcopy應用
04/04 20:01, 6F

04/05 22:12, 5年前 , 7F
後段 list 例中的 def g(int): 應先改成 def g(lst): 吧?
04/05 22:12, 7F
文章代碼(AID): #1SfQT-Qp (Python)