[問題] a+=b VS a = a+b 差異(solved)
原本認為 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
04/04 14:58, 1F
那【lst += [1]】 VS 【lst = lst + [1]】在函數內為什麼不一樣@@?
推
04/04 15:00,
5年前
, 2F
04/04 15:00, 2F
→
04/04 15:00,
5年前
, 3F
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:10, 4F
→
04/04 15:14,
5年前
, 5F
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
04/04 20:01, 6F
推
04/05 22:12,
5年前
, 7F
04/05 22:12, 7F