¿Por qué la adición de la lista de Python debe ser homogénea?

¿Puede alguien familiarizado con las partes internas de Python (CPython u otras implementaciones) explicar por qué se requiere que la adición de la lista sea homogénea?

In [1]: x = [1]

In [2]: x+"foo"
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
C:\Users\Marcin\<ipython-input-2-94cd84126ddc> in <module>()
----> 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']

¿Por qué no deberíax+"foo" arriba devuelve el mismo valor que el valor final dex en la transcripción anterior?

Esta pregunta se deriva de la pregunta de NPE aquí:¿Está el comportamiento de la lista de Python + = iterable documentado en alguna parte?

Actualización: Sé que no se requiere que sea heterogéneo.+= trabajo (pero lo hace) y de la misma manera, no se requiere que los heterogéneos+ ser un error Esta pregunta es sobre por qué se hizo esta última elección.

Es demasiado decir que los resultados de agregar una secuencia a una lista son inciertos. Si esa fuera una objeción suficiente, tendría sentido prevenir la heterogeneidad.+=. Actualización 2: en particular, python siempre delega las llamadas del operador al operando de la izquierda, así que no surge el problema "lo que es correcto" surge ": el objeto de la izquierda siempre rige (a menos que delegue a la derecha).

Actualización 3: Para cualquier persona que sostenga que esta es una decisión de diseño, explique (a) por qué no está documentada; o (b) donde esté documentado.

Update4: "lo que debería[1] + (2, ) return? "Debe devolver un valor de resultado igual al valor de una variablex inicialmente manteniendo[1] inmediatamente despuesx+=(2, ). Este resultado está bien definido.

Respuestas a la pregunta(4)

Su respuesta a la pregunta