zoukankan      html  css  js  c++  java
  • python中a+=b 和a=a+b的结果一样吗

    这里涉及到可变类型和不可变类型。

    可变类型:列表,字典,集合

    不可变:数字,字符串,元祖

    先看一下不可变类型的运算:

    +=运算

    >>> a, b = 1, 2
    >>> a1 = a
    >>> a += b
    >>> a
    3
    >>> a1
    1

    =+运算

    >>> a, b = 1, 2
    >>> a1 = a
    >>> a = a + b
    >>> a
    3
    >>> a1
    1

     对不可变类型,a+=b 和a=a+b结果是一样的

    可变类型的运算:

    +=运算

    >>> a = [1,2,3,4]
    >>> b = [5]
    >>> a1 = a
    >>> a += b
    >>> a
    [1, 2, 3, 4, 5]
    >>> a1
    [1, 2, 3, 4, 5]

    =+运算

    >>> a = [1,2,3,4]
    >>> b = [5]
    >>> a1 = a
    >>> a = a + b
    >>> a
    [1, 2, 3, 4, 5]
    >>> a1
    [1, 2, 3, 4]

    可以看到a+=b和a=a+b返回结果不同。为什么呢。

    __add__和__iadd__的区别

    • __add__ 方法接收两个参数,返回它们的和,两个参数的值均不变。
    • __iadd__ 方法接收两个参数,第一个参数的值改变

    对可变类型使用加号操作(即a=a+b),调用__add__会返回一个新的对象,原来的对象不变。

     a=a+b后a指向新的地址,但a1还是指向以前的地址

     对可变类型使用加号操作(即a+=b),调用__iadd__,第一个参数的值改变,即a指向的本身内容发生改变,指向位置不发生改变。a变了a1也跟着变

  • 相关阅读:
    T1-TensorFlow基础
    iOS之开发小技巧
    iOS之自定义控件
    plist文件的读取和xib加载cell
    iOS之tabBar随tableView的滑动而隐藏/显现
    iOS之initialize与load
    iOS之九宫格图片
    iOS之ToolBar定制
    iOS之新浪微博的OAuth授权
    Markdown的简单实用
  • 原文地址:https://www.cnblogs.com/hhsh/p/13697535.html
Copyright © 2011-2022 走看看