"""Exploring lists as mutable objects http://openbookproject.net/thinkcs/python/english2e/ch09.html#lists-are-mutable """ a = "banana" b = "banana" # do a and b point to the same object in memory? id(a) id(b) # Python only created one string, and both a and b refer to it. # lists behave differently. When we create two lists, we get two objects: a = [1, 2, 3] b = [1, 2, 3] id(a) id(b) # Since variables refer to objects, if we assign one variable to another, # both variables refer to the same object: a = [1, 2, 3] b = a id(a) == id(b) # if we change b, that also changes a b[0] = 5 print a # If we want to modify a list and also keep a copy of the original, we need # to be able to make a copy of the list itself, not just the reference. # This process is sometimes called cloning, to avoid the ambiguity of the word copy. # The easiest way to clone a list is to use the slice operator: a = [1, 2, 3] b = a[:] print b a == b id(a) == id(b) # the equality operator for lists determines if all elements of the two lists are the same # Now we are free to make changes to b without worrying about a: b[0] = 5 print a