美文网首页
python列表中a+=a和 a= a+a的区别

python列表中a+=a和 a= a+a的区别

作者: bad_boy | 来源:发表于2018-01-20 11:16 被阅读530次

    Python中的数据结构分为可变(mutable)和不可变(immutable):

    可变类型,值可以改变:

    • 列表 list

    • 字典 dict

    不可变类型,值不可以改变:

    • 数值类型 int, long, bool, float

    • 字符串 str

    • 元组 tuple

    对于可变类型,=和+=有着明显的不同,如list:

    +表示连接操作,+=表示追加

    对于不可变类型,=和+=就是一样的操作,如上面的tuple

    可变类型与不可变类型的本质在于内存空间是否可变~

    更具体的说就是:

    a=a+b是先创建一个新的对象并让变量a引用这个对象,a+=b是让a所引用的对象的值变成a+b的值。

    += 是 + 的一种升级版本, 具有能把执行后的结果再写回传递来的变量本身的功能, 可变变量自身有比不可变变量多一个魔法方法 _iadd_, += 操作调用 _iadd_方法,没有该方法时,再尝试调用_add_方法, 不可变变量没有_iadd_方法

    例子:

    def selfAdd(a):

        a = a + a

        # a += a #这两句话是不同的,在函数里面。

    def selfAdd1(a):

        a += a

    a_list = [1, 2]

    selfAdd(a_list)

    print(a_list)

    b_list = [1, 2]

    selfAdd1(b_list)

    print(b_list)

    输出结果:

    import dis

    print(dis.dis(selfAdd))

    #输出结果:

    0 LOAD_FAST                0 (a)

    3 LOAD_FAST                0 (a)

    6 BINARY_ADD            #区别在这里

    7 STORE_FAST              0 (a)

    10 LOAD_CONST              1 (None)

    13 RETURN_VALUE

    None

    print(dis.dis(selfAdd1))

    #输出结果:

    0 LOAD_FAST                0 (a)

    3 LOAD_FAST                0 (a)

    6 INPLACE_ADD         #原地加

    7 STORE_FAST              0 (a)

    10 LOAD_CONST              1 (None)

    13 RETURN_VALUE

    None

    参考:

    https://segmentfault.com/q/1010000009754631?sort=created

    http://blog.csdn.net/xinxinNoGiveUp/article/details/78442200

    相关文章

      网友评论

          本文标题:python列表中a+=a和 a= a+a的区别

          本文链接:https://www.haomeiwen.com/subject/cmazoxtx.html