aioracle
aioracle

Reputation: 371

Python (Fibo series): trying to understand what is the difference between a, b = b, a + b OR a = b & a = a + b

I am not sure what would be an appropriate heading for this question and this can be a repeated question as well. So please guide accordingly.

I am new to python programming. I have this simple code to generate Fibonacci series.

1: def fibo(n):
2:    a = 0
3:    b = 1
4:    for x in range(n):
5:        print (a, end=' ')
6:        #a, b = b, a+b
7:        a = b
8:        b = a+b
9:    print()
10: num = int(input("enter n value: "))
11: print(fibo(num))

If I execute the above code as-is the result I get is as follows

enter n value: 10
0 1 2 4 8 16 32 64 128 256 

If uncomment #6 and comment lines #7 and #8 the result I get is the actual fibo series.

enter n value: 10
0 1 1 2 3 5 8 13 21 34 

I would like to know what is the difference between

a, b = b, a + b 

and

a = b
b = a + b

Programming IDE used: PyCharm Community 2017.3

Upvotes: 4

Views: 141

Answers (5)

gokhan_ozeloglu
gokhan_ozeloglu

Reputation: 133

I think the # line is pythonic solution. But if you got confused,you can you use a variable which is temporary. you can assign the value temp before, then you can change the values

Upvotes: 0

Midhun Mohan
Midhun Mohan

Reputation: 582

Thought make it simple so anyone can understand it if you use this kind of syntax

a = 10
b = 20

a = b
b = a+b

print (a)
print (b)

after initially assigning a = 10 it will be assigning a = 20 since python is dynamically typed language it will change the value of variable a from 10 to 20 so the result will be like

a=20
b=40

but if we use

a = 10
b = 20

a,b = b,a+b

print (a)
print (b)

this will be assigning the values in a single line so the values of a and b will be exactly used from what it is initialised above it and the result will be like which is the correct solution

a=20
b=30

Upvotes: 0

Sohaib Farooqi
Sohaib Farooqi

Reputation: 5666

Assignment Statements assigns reference of source variable to target variable. Let walk through an example to understand more

>>> a = 5
>>> b = 6
>>> a = b

In this example b is source variable and a is the target variable. Now memory address for both of these variables are same. We can confirm this as well

>>> hex(id(a)), hex(id(b))
>>> ('0x1002739e0', '0x1002739e0')

Another test to confirm this is to use is operator

>>> a is b
>>> True

Now coming back to your example. First statement

>>> a, b = b, a + b 

Assignes b to a and (a+b) to b. This happens as a single operation so both variables are different. We can apply above tests to confirm this

>>> a is b
>>> False

>>> hex(id(a)), hex(id(b))
>>> ('0x1002739e0', '0x2008739t0')

The second statement

 >>> a = b
 >>> b = a + b

Assignes b to a and then (a+b) to b. These are two different statements, so at first step a and b are already identical. Thus the second statement is equivalent to b = b + b.

Upvotes: 2

nevets
nevets

Reputation: 4828

In line 7, you've already assigned the value in b to a, so in line 8, new value for b is actually double the old b's value.

While in line 6, the values on the right side of = will be using the old values, that's why you could get Fibo series.

Upvotes: 4

excalibur1491
excalibur1491

Reputation: 1221

a = b
b = a + b

is actually:

a = b
b = b + b

what you want is:

a = b
b = old_value_of_a + b

When you do a, b = b, a + b it really is doing:

tmp_a = b
tmp_b = a + b
a = tmp_a
b = tmp_b

which is what you want

Upvotes: 6

Related Questions