python中a=a+2與a+=2的區別


1、a=a+2,表示一個新的對象,新的對象名字還是a,但是指向的內存地址已經變了

>>> a=2
>>> id(a)
140406287260016
>>> a=a+2
>>> a
4
>>> id(a)
140406287259968

所以對於tuple對象(不可變對象),也是可以這樣操作的

>>> tuple1=(1,2)
>>> id(tuple1)
4521580448
>>> tuple1=tuple1+(3,)
>>> tuple1
(1, 2, 3)
>>> id(tuple1)
4521658880

2、a+=2對於有些對象的操作是表示原來的對象,對有些對象的操作是生成了一個新對象

不可變對象tuple1,操作完后,內存地址已經發生變化,生成一個新的對象
>>> tuple1=(1,2) >>> type(tuple1) <type 'tuple'> >>> tuple1+=(3,) >>> id(tuple1) 4521658880 >>> tuple1+=(4,5) >>> id(tuple1) 4520649072

而list對象,可變對象,+=操作、append操作、extend操作,都是在原對象上操作

>>> list1=[1,2]
>>> id(list1)
4521614656
>>> list1+=[3]
>>> id(list1)
4521614656
>>> list1.append(4)
>>> id(list1)
4521614656
>>> list1.extend(5)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object is not iterable
>>> list1.extend([5])
>>> id(list1)
4521614656
>>>

3、

x = [1,2,3]  
print "before func(), global! x = ",x,"id(x) = ",id(x)  
  
def func():  
    global x  
    print "in func(), local! original x = ",x,"id(x) = ",id(x)  
    x = x + [1]  
    print "in func(), local! now x = ",x,"id(x) = ",id(x)  
  
func()  
print "after func(), global! x = ",x,"id(x) = ",id(x)  
結果:
[python] view plain copy
before func(), global! x =  [1, 2, 3] id(x) =  47781768  
in func(), local! original x =  [1, 2, 3] id(x) =  47781768  
in func(), local! now x =  [1, 2, 3, 1] id(x) =  47795720  
after func(), global! x =  [1, 2, 3, 1] id(x) =  47795720  

global就保證了,即使我的變量x在函數中指向對象變了,外部的x也會指向新的對象

 

x = [1,2,3]  
print "before func(), global! x = ",x,"id(x) = ",id(x)  
  
def func(x):  
    print "in func(), local! original x = ",x,"id(x) = ",id(x)  
    x  = x + [1]  
    print "in func(), local! now x = ",x,"id(x) = ",id(x)  
  
func(x)  
print "after func(), global! x = ",x,"id(x) = ",id(x)  
結果:
before func(), global! x =  [1, 2, 3] id(x) =  46339976  
in func(), local! original x =  [1, 2, 3] id(x) =  46339976  
in func(), local! now x =  [1, 2, 3, 1] id(x) =  46390664  
after func(), global! x =  [1, 2, 3] id(x) =  46339976  

x = x + [1],是新建了一個對象,id(x) =  46390664

 

利用id(x),查看下x += [1]對象是怎么變化的吧:
x = [1,2,3]  
print "before func(), global! x = ",x,"id(x) = ",id(x)  
  
def func(x):  
    print "in func(), local! original x = ",x,"id(x) = ",id(x)  
    x += [1]  
    print "in func(), local! now x = ",x,"id(x) = ",id(x)  
  
func(x)  
print "after func(), global! x = ",x,"id(x) = ",id(x)  
結果:
before func(), global! x =  [1, 2, 3] id(x) =  46536584  
in func(), local! original x =  [1, 2, 3] id(x) =  46536584  
in func(), local! now x =  [1, 2, 3, 1] id(x) =  46536584  
after func(), global! x =  [1, 2, 3, 1] id(x) =  46536584  
id(x)全程一樣,x += [1],python直接就在原對象上操作

 

 

參考:

1、http://blog.csdn.net/emaste_r/article/details/47395055


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM