【问题标题】:Why does python list L += x behaves differently than L = L + x? [duplicate]为什么 python list L += x 的行为与 L = L + x 不同? [复制]
【发布时间】:2014-10-17 06:58:50
【问题描述】:
ls = [1,2,3]
id(ls)
output: 4448249184  # (a)

ls += [4]
id(ls)
output: 4448249184  # (b)

ls = ls + [4]
id(ls)
output: 4448208584   # (c)

为什么 (a) 和 (b) 相同,但 (b) 和 (c) 不同?

L += xL = L + x不一样吗?

【问题讨论】:

    标签: python list operators


    【解决方案1】:

    使用+=,您正在修改plac 中的列表,例如当您使用将x 附加到L 的类方法时(例如.append.extend...)。这是__iadd__ 方法。

    调用这些方法来实现增强的算术赋值(+=、-=、*=、/=、//=、%=、**=、>=、&=、^= , |=)。这些方法应该尝试就地执行操作(修改 self)并返回结果(可以是但不一定是 self)。

    使用 L = L + x,您正在创建一个新列表 (L+x),您正在影响一个变量(在本例中为 L)。

    另见different behaviour for list __iadd__ and __add__

    【讨论】:

      【解决方案2】:

      List 情况下的增强赋值是不同的。 它不是像整数那样的实际赋值,所以

      a += b
      

      等于

      a = a+b
      

      而在 List 的情况下,它的操作如下:

      list += x
      

      是:

      list.extends(x)
      

      【讨论】:

        猜你喜欢
        • 2016-03-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-06
        • 1970-01-01
        • 2018-05-19
        • 2015-02-05
        • 1970-01-01
        相关资源
        最近更新 更多