为什么+ =运算符的工作方式与+不同,并为python字典赋值运算符?

Why does += operator work differently than + and assign operator for python dictionary?

本问题已经有最佳答案,请猛点这里访问。

有人能解释一下这种行为吗?

1
2
3
4
5
6
7
8
9
10
>>> 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
>>>


因为a = a + ba += b不是一回事。前者调用__add__1(并进行常规分配,不能超负荷),而+=调用__iadd__(也进行常规分配,但只允许在__iadd__未执行时返回__add__。列表用不同的语义定义两者;__add__创建一个新的列表,并要求两个操作数都是列表,而__iadd__本质上是.extend(),因此(1)在任何不可数上工作,(2)在适当的位置改变列表。

在某些情况下是1或__radd__,但我正在掩盖这一点,因为它不会真正影响本例的结果。