鉴于在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被修改.
谢谢,弗兰克
这是一个有趣的+=操作者的副作用,而__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.
| 归档时间: |
|
| 查看次数: |
904 次 |
| 最近记录: |