¿Cuál es la diferencia entre `a, b = b, a + b` y` a = b; b = a + b` para fibonacci

Soy nuevo en Python, así que quiero hacerte una pregunta.

Anteriormente, mientras escribía una función de fibonacci, intenté reemplazar

a, b = b, a+b 

con

 a = b b = a + b 

Creyendo que era lo mismo pero noté que la salida es diferente (y incorrecta) ¿No deberían estos dos códigos hacer lo mismo? Aquí está el código completo:

 #!/usr/bin/env python # -*- coding: utf-8 -*- def main(args): fibonacci(1000) return 0 def fibonacci(n): a, b = 0, 1 while b < n: print b, a, b = b, a+b # if I comment this and decomment the two line below it shows me a different output # a = b # b = a + b if __name__ == '__main__': import sys sys.exit(main(sys.argv)) 

Cuando tu lo hagas:

 a, b = b, a+b 

a mantendrá el valor anterior de b y b mantendrá a+b función del valor anterior.

Pero cuando lo haces:

 a = b b = a + b 

El valor de a se actualiza a b durante a=b y, por lo tanto, a+b tendrá un resultado diferente, ya que a ahora se actualiza.

Por ejemplo, ver código simple para intercambiar dos valores. Es posible debido al cambio en los valores sobre la marcha:

 >>> a , b = 5, 10 >>> a, b = b, a >>> a, b (10, 5) 

b, a+b es lo mismo que (b, a+b) (una tupla). Cuando haces a, b = b, a+b puedes asignar el primer elemento a la variable de la izquierda y el segundo valor a la variable de la derecha.

En su reemplazo, cambió el valor de a antes de calcular b , lo que no sucedió antes.

Entonces, si asumimos que a = 1 y b = 2 , tenemos:

 a, b = (2, 1+2) >> print(a) >> 2 >> print(b) >> 3 

En tu último ejemplo, tendríamos:

 a = 2 b = 2 + 2 >> print(a) >> 2 >> print(b) >> 4