作者znmkhxrw (QQ)
看板Python
标题[问题] a+=b VS a = a+b 差异
时间Thu Apr 4 14:43:08 2019
原本认为 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://webptt.com/cn.aspx?n=bbs/Python/M.1554360190.A.6B3.html
1F:推 mirror0227: 是local没错 但物件的话存的是指标 04/04 14:58
那【lst += [1]】 VS 【lst = lst + [1]】在函数内为什麽不一样@@?
2F:推 TitanEric: 老问题 list跟dict等物件在function是pass by referenc 04/04 15:00
3F:→ 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
5F:→ 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
6F:推 jiyu520: 相关的还有deepcopy应用 04/04 20:01
7F:推 BZnoo: 後段 list 例中的 def g(int): 应先改成 def g(lst): 吧? 04/05 22:12