有人可以解释一下这种行为:
>>> a = {'hello':'world' , 'good':'food'}
>>> b = [1,2]
>>> b = b + a
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can only concatenate list (not "dict") to list
>>> b += a
>>> b
[1, 2, 'good', 'hello'] <--- Why do the keys get added when dict cannot be added to a list
>>>
答案 0 :(得分:5)
因为a = a + b
和a += b
不是一回事。前者调用__add__
1 (并进行常规分配,不能重载),而+=
调用__iadd__
(并且还会定期分配,但仅限于在__add__
未实施时允许回退到__iadd__
。列表用不同的语义定义; __add__
创建一个新列表,并要求两个操作数都是列表,而__iadd__
本质上是.extend()
,因此(1)适用于任何可迭代,(2)就地改变列表。
1 或__radd__
,但我对此表示赞赏,因为在这种情况下它并没有真正影响结果。