Skip to main content

Section 10.11 Aliasing

Since variables refer to objects, if we assign one variable to another, both variables refer to the same object:

In this case, the reference diagram looks like this:

Because the same list has two different names, a and b, we say that it is aliased. Changes made with one alias affect the other. In the codelens example below, you can see that a and b refer to the same list after executing the assignment statement b = a.

Checkpoint 10.11.1.

Activity: CodeLens 10.11.2 (chp09_is3)

Although this behavior can be useful, it is sometimes unexpected or undesirable. In general, it is safer to avoid aliasing when you are working with mutable objects. Of course, for immutable objects, there's no problem. That's why Python is free to alias strings and integers when it sees an opportunity to economize.

Check your understanding

Checkpoint 10.11.2.

    What is printed by the following statements?

    alist = [4, 2, 8, 6, 5]
    blist = alist
    blist[3] = 999
    print(alist)
    
  • [4, 2, 8, 6, 5]

  • blist is not a copy of alist, it is a reference to the list alist refers to.
  • [4, 2, 8, 999, 5]

  • Yes, since alist and blist both reference the same list, changes to one also change the other.

Checkpoint 10.11.3.

    Consider the following lists:

    list1=[1,100,1000]
    list2=[1,100,1000]
    list3=list1
    

    Which statements will output True? (Select all that apply).

  • print(list1 == list2)

  • list1 and list2 have the same value
  • print(list1 is list2)

  • list1 and list2 have the same value but do not refer to the same object
  • print(list1 is list3)

  • list3 is assigned to list1, so they refer to the same object
  • print(list2 is not list3)

  • list2 and list3 do not refer to the same object.
  • print(list2 != list3)

  • list2 and list3 have the same value
You have attempted of activities on this page.