python中a=a+2与a+=2的区别

Posted 沧海一粟,何以久远

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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







以上是关于python中a=a+2与a+=2的区别的主要内容,如果未能解决你的问题,请参考以下文章

python中a=a+2与a+=2的区别

320Python 2.x 与 3.x 的区别

Python与C储存方式的区别

python版本与编码的区别

Python2与Python3的区别/网络编程/socketserver模块中的多线程

Python中的 // 与 / 的区别