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直接就在原对象上操作

    参考:

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

  • 相关阅读:
    [转][ASP.NET Core 3框架揭秘] 跨平台开发体验: Windows [上篇]
    [转]Jmeter压力测试工具安装及使用教程
    [转]来自后端的逆袭 blazor简介 全栈的福音
    [转]【译】.NET Core 3.0 中的新变化
    [转]Spring历史版本变迁和如今的生态帝国
    [转]SpringBoot整合Swagger2以及生产环境的安全问题处理
    IIS7下,显示PHP错误(不显示500错误,而显示详细错误)
    移动端FastClick和editor冲突问题。
    npm WARN checkPermissions Missing write access to 解决办法
    教你用Cordova打包Vue项目
  • 原文地址:https://www.cnblogs.com/shengulong/p/7906582.html
Copyright © 2011-2022 走看看