¿Cómo funciona el operador de coma de Python durante la asignación?

Estaba leyendo las declaraciones de asignación en los documentos de Python (http://docs.python.org/reference/simple_stmts.html#assignment-statements ).

En eso se cita que:

Si el objetivo es una lista de objetivos entre paréntesis o entre corchetes: el objeto debe ser iterable con el mismo número de elementos, ya que hay objetivos en la lista de objetivos, y sus elementos se asignan, de izquierda a derecha, al correspondiente objetivos

Después de leerlo, pensé en escribir una muestra como esta:

a = 5
b = 4
a, b = a + b, a
print a, b

Mi suposición era que a y b deberían tener el valor de 9.

Sin embargo, estoy equivocado. 'a' tiene el valor de 9 y 'b' tiene el valor de 5.

¿Puede alguien ayudarme a entender esto mejor? ¿Por qué se asigna el valor más antiguo de 'a' en lugar del nuevo? Según los documentos, el valor de a se asignará primero, ¿verdad? ¿Me estoy perdiendo de algo?

Respuestas a la pregunta(3)

Puede pensar en las asignaciones que suceden en paralelo en copias en lugar de secuencialmente y en el lugar.

Esta es la razón por la que en Python no necesitas una función de intercambio:

a, b = b, a

Funciona suficientemente sin requerir una variable temporal,c.

Solución de preguntas

Todas las expresiones a la derecha del operador de asignación se evalúan antes de realizar cualquiera de las asignaciones.

Desde elTutorial de Python: Primeros pasos hacia la programación:

La primera línea contiene una asignación múltiple: las variables a y b obtienen simultáneamente los nuevos valores 0 y 1. En la última línea esto se usa nuevamente, demostrando queLas expresiones en el lado derecho se evalúan primero antes de que se lleve a cabo cualquiera de las tareas.. Las expresiones del lado derecho se evalúan de izquierda a derecha.

Énfasis mío.

Su código es funcionalmente equivalente a lo siguiente:

a, b = 5 + 4, 5
print a, b
 thiruvenkadam16 jul. 2012 12:18
Gracias ... Eso explica. ¿Me puede proporcionar un enlace o dos con respecto a su respuesta? Me ayudará a entender las cosas mucho más claras.
 Mark Byers16 jul. 2012 12:21
Por supuesto. Enlace añadido.

Python no tiene un "operador de coma" como en C. En cambio, la coma indica que se debe construir una tupla. El lado derecho de

a, b = a + b, a

es una tupla con dos elementosa + b ya.

En el lado izquierdo de una asignación, la coma indica que el desempaquetado de la secuencia se debe realizar de acuerdo con las reglas citadas:a Se le asignará el primer elemento de la tupla,b el segundo.

Su respuesta a la pregunta