看板 Python 關於我們 聯絡資訊
原本認為 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
mirror0227: 是local沒錯 但物件的話存的是指標 04/04 14:58
那【lst += [1]】 VS 【lst = lst + [1]】在函數內為什麼不一樣@@?
TitanEric: 老問題 list跟dict等物件在function是pass by referenc 04/04 15:00
TitanEric: e 跟 JS一樣 04/04 15:00
是指 list 跟 dict 在函數內的 【lst += [1]】 VS 【lst = lst + [1]】 所進行的reference是不一樣的?? ※ 編輯: znmkhxrw (59.102.226.184), 04/04/2019 15:09:05
mythnc: https://stackoverflow.com/a/43785469 04/04 15:10
mythnc: python是dynamic typing,+=跟=不全然一樣 04/04 15:14
對!! 就是這個原因 謝拉~ 我剛剛print(id(lst))就知道原因了 lst+= [5]是存在同一個記憶體位置 lst = lst + [5] 已經另外開一個位置存了 ※ 編輯: znmkhxrw (59.102.226.184), 04/04/2019 15:29:11
jiyu520: 相關的還有deepcopy應用 04/04 20:01
BZnoo: 後段 list 例中的 def g(int): 應先改成 def g(lst): 吧? 04/05 22:12