Почему дополнение списка Python должно быть однородным?

Может кто-нибудь знаком с PythonВнутренние элементы (CPython или другие реализации) объясняют, почему добавление в список должно быть однородным:

In [1]: x = [1]

In [2]: x+"foo"
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
C:\Users\Marcin\ in ()
----> 1 x+"foo"

TypeError: can only concatenate list (not "str") to list

In [3]: x+="foo"

In [4]: x
Out[4]: [1, 'f', 'o', 'o']

Почему бы нетx+"foo" выше вернуть то же значение, что и окончательное значениеx в приведенном выше стенограмме?

Этот вопрос вытекает из NPE 'вопрос здесь:Поведение Pythons список + = повторяемость документирована где-нибудь?

Обновление: я знаю, что это не требуется, чтобы гетерогенные+= работать (но это делает), а также, не требуется, чтобы гетерогенные+ быть ошибкой Этот вопрос о том, почему был сделан этот последний выбор.

Слишком много, чтобы сказать, что результаты добавления последовательности в список являются неопределенными. Если бы это было достаточным возражением, имело бы смысл предотвратить разнородные+=, Обновление 2: В частности, python всегда делегирует вызовы операторов левому операнду, так что никаких проблем »что правильно делать " возникает»: левый объект всегда управляет (если он не делегирует справа).

Обновление 3: Для тех, кто утверждает, что это проектное решение, пожалуйста, объясните (а) почему оно не задокументировано; или (б) где это задокументировано.

Update4: "что должно[1] + (2, ) вернуть?" Он должен возвращать значение результата, равное значению переменнойx изначально держит[1] незамедлительно послеx+=(2, ), Этот результат четко определен.

Ответы на вопрос(4)

Ваш ответ на вопрос