Warum muss das Hinzufügen der Python-Liste homogen sein?

Kann jemand, der mit Pythons Interna (CPython oder anderen Implementierungen) vertraut ist, erklären, warum das Hinzufügen von Listen homogen sein muss:

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']

Warum sollte das nichtx+"foo" Oben wird derselbe Wert zurückgegeben wie der Endwert vonx im obigen Protokoll?

Diese Frage ergibt sich aus der Frage von NPE hier:Ist das Verhalten von Pythons Liste + = iterabel irgendwo dokumentiert?

Update: Ich weiß, es ist nicht erforderlich, dass heterogen+= arbeiten (aber es funktioniert) und ebenso ist es nicht erforderlich, dass heterogen+ ein Fehler sein. Bei dieser Frage geht es darum, warum letztere Wahl getroffen wurde.

Es ist zu viel zu sagen, dass die Ergebnisse des Hinzufügens einer Sequenz zu einer Liste ungewiss sind. Wäre dies ein hinreichender Einwand, wäre es sinnvoll, eine heterogene Haltung zu vermeiden+=. Update2: Insbesondere delegiert Python Operator-Aufrufe immer an den linken Operanden, sodass kein Problem "Was ist das Richtige?" Auftritt: Das linke Objekt regiert immer (es sei denn, es delegiert nach rechts).

Update 3: Falls Sie argumentieren, dass dies eine Entwurfsentscheidung ist, erklären Sie bitte (a) warum dies nicht dokumentiert ist; oder (b) wo es dokumentiert ist.

Update4: "Was soll[1] + (2, ) return? "Es sollte ein Ergebniswert zurückgegeben werden, der dem Wert einer Variablen entsprichtx zunächst halten[1] gleich nachx+=(2, ). Dieses Ergebnis ist klar definiert.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage