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也跟着变

  • 相关阅读:
    K2 BPM介绍(2)
    K2 BPM介绍(1)
    认识BPM
    使用VS Code发布博客
    IIS 使用 HTTP/2
    IIS 8的第一次请求不变慢如何配置
    C# 图片识别技术(支持21种语言,提取图片中的文字)
    第九讲 C#练习题
    c#基础 第八讲
    c#基础 第六讲
  • 原文地址:https://www.cnblogs.com/hhsh/p/13697535.html
Copyright © 2011-2022 走看看