添加到列表与增量

iwa*_*der 6 python

鉴于在Python中:

element = element + [0]
Run Code Online (Sandbox Code Playgroud)

应该等于:

element += [0]
Run Code Online (Sandbox Code Playgroud)

为什么要修改列表而另一个没有?这是一个例子:

>>> a = [[0, 0], [0,0]]
>>> for element in a:
...     element = element + [0]
... 
>>> a
[[0, 0], [0, 0]]
Run Code Online (Sandbox Code Playgroud)

a未被修改.但如果我增加:

>>> a = [[0, 0], [0,0]]
>>> for element in a:
...     element += [0]
...
>>> a
[[0, 0, 0], [0, 0, 0]]
Run Code Online (Sandbox Code Playgroud)

a被修改.

谢谢,弗兰克

Dav*_*ver 7

这是一个有趣的+=操作者的副作用,而__iadd__不是__add__.

该陈述x = x + y相当于x = x.__add__(y),而x += y等同于x = x.__iadd__(y).

这样可以通过扩展现有(ex,大致相当于)列表来list优化类+=,而不是创建一个全新的列表(这是需要做的).x += yx.extend(y)+

例如:

>>> a = [1, 2, 3]
>>> original_a = a
>>> b = [1, 2, 3]
>>> original_b = b
>>> a += [4]
>>> b = b + [4]
>>> a is original_a
True
>>> b is original_b
False

你可以看到,使用+=维护左侧(即,一个新的列表的标识创建),同时使用+不会维持身份(即,一个新的列表创建).

有关更多信息,请参阅:http://docs.python.org/library/operator.html#operator.iadd以及文档正上方的段落operator.iadd.