Es extremadamente fácil de comprobar, con el módulo dis
:
>>> import dis
>>> dis.dis(compile('a,b,c=1,2,3','','exec'))
1 0 LOAD_CONST 4 ((1, 2, 3))
3 UNPACK_SEQUENCE 3
6 STORE_NAME 0 (a)
9 STORE_NAME 1 (b)
12 STORE_NAME 2 (c)
15 LOAD_CONST 3 (None)
18 RETURN_VALUE
>>> dis.dis(compile('(a,b,c)=(1,2,3)','','exec'))
1 0 LOAD_CONST 4 ((1, 2, 3))
3 UNPACK_SEQUENCE 3
6 STORE_NAME 0 (a)
9 STORE_NAME 1 (b)
12 STORE_NAME 2 (c)
15 LOAD_CONST 3 (None)
18 RETURN_VALUE
>>>
ver? Esos paréntesis totalmente redundantes hacen absolutamente diferencia con respecto al bytecode que se genera y ejecuta, como, por ejemplo, a+b
y (a+b)
generará y ejecutará exactamente el mismo bytecode entre sí. Por lo tanto, si le gusta agregar paréntesis redundantes, olvídese: a las personas que leen su código puede que no les gusten, pero los que lo están ejecutando nunca lo notarán. Solo que, ¿por qué detenerse solo en dos pares de paréntesis redundantes? Véase,
>>> dis.dis(compile('(((a,b,c)))=(((1,2,3)))','','exec'))
1 0 LOAD_CONST 4 ((1, 2, 3))
3 UNPACK_SEQUENCE 3
6 STORE_NAME 0 (a)
9 STORE_NAME 1 (b)
12 STORE_NAME 2 (c)
15 LOAD_CONST 3 (None)
18 RETURN_VALUE
>>>
seis pares de paréntesis redundantes (o cualquier número, en realidad) siguen produciendo exactamente el mismo código. Una vez que deja el número mínimo obvio de paréntesis redundantes (ninguno en absoluto: son redundantes, después de todo ;-), exactamente donde se detiene? -) Y por qué allí, cuando es "libre" agregar uno más par ... o dos ... o tres ...? -)
Aquí hay una pista para su futuro en informática (He estado en el negocio por más de 30 años). No dedique tiempo a este tipo de preguntas de optimización hasta que pueda ** demostrar ** que la declaración de asignación múltiple está matando a su programa. Hasta que tengas ** prueba ** de que algo es inaceptablemente lento, úsalo. Usa todo sin preocuparte por el rendimiento. La gente que inventó el lenguaje ya se preocupó por eso. –