Python: ¿Cómo funcionan las múltiples asignaciones en una sola línea?

Sé que la asignación es una statement en Python, es decir, no se evalúa a un valor a diferencia de una expresión. ¿Cómo funciona la siguiente línea de código en Python, entonces? Por favor, explique qué sucede internamente en el intérprete de Python (lexing, análisis, formación de árbol de syntax abstracta).

# this works spam = eggs = 'ham' # this doesn't work. Throws SyntaxError spam = (eggs = 'ham') 

¿Por qué la primera línea de arriba funciona mientras que la segunda no?

No se trata de la precedencia del operador. Es una syntax designada. No se puede “reconciliar” agregando paréntesis.

Ahora para la respuesta completa (como ya lo indican los comentarios de @ Rob) vea aquí y aquí .