• 增量运算符+=和*=的原理与不可变序列增量运算效率低的原因


    一、原理

    例如:

    >>> a=1
    >>> a+=1
    >>> a
    2

    在 a+=b 中

    +=背后其实是__iadd__方法,用于就地加法。

    对于可变序列(例如list、bytearray、array.array)来说,a会就地改动,类似于调用了a.extend(b一样)

    而*+取决于这个类是否实现了 __imul__方法。

    二、对于不可变序列低效原因

    >>> l=[1,2,3]
    >>> id(l)
    2613324000200
    >>> l*=2
    >>> l
    [1, 2, 3, 1, 2, 3]
    >>> id(l)
    2613324000200
    >>>

    1、可变序列进行增量运算,内存地址不变


    >>> t=(1,2,3)
    >>> id(t)
    2613324034408
    >>> t*=2
    >>> t
    (1, 2, 3, 1, 2, 3)
    >>> id(t)
    2613321738568

    2、对于不可变序列、例如元组,需要把原来对象中的元素先复制到新的对象,然后再追加新的元素。因此对不可逆序列增量运算效率低。

     str是个例外,Cpython对它进行了优化,+=字符串串接操作时,str初始化内存的时候,程序已经为str预留了可拓展空间。

  • 相关阅读:
    学习总结javascript和ajax,php,和css
    css基础二
    JQUERY基础
    JS基础与DOM操作(一)
    div布局
    样式表
    框架及其他小技巧
    表格与表单
    HTML基础
    二阶段测试
  • 原文地址:https://www.cnblogs.com/nemolmt/p/8068303.html
Copyright © 2020-2023  润新知