I am new to Python (and dont know much about programming anyway), but I remember reading that python generally does not copy values so any statement a = b makes b point to a. If I run
a = 1
b = a
a = 2
print(b)
gives the result 1. Should that not be 2?
No, the result should be 1.
Think of the assignment operator ( =
) as the assignment of a reference.
a = 1 #a references the integer object 1
b = a #b and a reference the same object
a = 2 #a now references a new object (2)
print b # prints 1 because you changed what a references, not b
This whole distinction really is most important when dealing with mutable objects such as lists
as opposed to immutable objects like int
,float
and tuple
.
Now consider the following code:
a=[] #a references a mutable object
b=a #b references the same mutable object
b.append(1) #change b a little bit
print a # [1] -- because a and b still reference the same object
# which was changed via b.
When you execute b = a
, it makes b refer to the same value a refers to. Then when you execute a = 2
, it makes a refer to a new value. b is unaffected.
The rules about assignment in Python:
Assignment simply makes the name refer to the value.
Assignment to a name never affects other names that refer to the old value.
Data is never copied implicitly.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With