zoukankan      html  css  js  c++  java
  • 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直接就在原对象上操作
    复制代码
  • 相关阅读:
    python引用.py文件
    推荐系统之矩阵分解 转载 特别好
    数据挖掘之一元线性回归 python代码
    system服务文件讲解 转载
    bin sbin /usr/bin /usr/sbin区别 转载
    linux设置部门(或者学生部门)的共享目录
    Error establishing a database connection wordpress网站出现这个问题centos7的
    tomcat的java项目部署位置
    MAMP PRO教程
    MAMP使用简单教程
  • 原文地址:https://www.cnblogs.com/ksunone/p/8493311.html
Copyright © 2011-2022 走看看