An assignment only creates a “binding” (an association) between a name and a “target” (object of some type). A copy is sometimes necessary so you can change the value of one object without changing the other (when two names are pointing to the same object).
# Assignment: bind the name y to # the list [1, 2]. y = [1, 2 ] # Create another binding - # bind the name x to the same # object that y is currently bound to. x = y # x[0 ] is changed too, when y[0 ] is. y = 99 print(x) # 99
The copy module has methods to support both shallow and deep copying of objects.
To create a shallow copy (construct a new object, but references to the objects found in the original are inserted):
from copy import copy y = [1, 2 ] x = copy(y) # note that x = y.copy() works y = 99 print(x) # 1
To create a deep copy (instead of references, multiple copies are used):
from copy import deepcopy #... x = deepcopy(y)