>>> c = [1, 2, 3]
>>> print(c, id(c))
[1, 2, 3] 43955984
>>> c += c
>>> print(c, id(c))
[1, 2, 3, 1, 2, 3] 43955984
>>> del c
>>> c = [1, 2, 3]
>>> print(c, id(c))
[1, 2, 3] 44023976
>>> c = c + c
>>> print(c, id(c))
[1, 2, 3, 1, 2, 3] 26564048
В чем разница? + = и + не должны быть просто синтаксическим сахаром?+ и + = разные операторы?
Ваш пример ясно показывает, что это не так. + = явно добавляется к этому объекту, а x = a + b (даже если a = b = x) явно создаст новый результат и назначит его LHS. Я думаю, что было бы контрпродуктивно проверять каждое дополнение, чтобы увидеть, было ли это простое добавление (как указано выше) и оптимизировать его до + =. – Lazarus
почему нисходящий?Я признаю, что название может быть лучше, но сам вопрос вполне применим. – Kimvais
У этого вопроса есть какая-то приятная дополнительная информация о операциях конкатенации списков http://stackoverflow.com/questions/2022031/python-append-vs-operator-on-lists -why-do-these-give-different-results – Kimvais