pythonpointersvariablesidentifier

Are Python variables pointers? Or else, what are they?


Variables in Python are just pointers, as far as I know.

Based on this rule, I can assume that the result for this code snippet:

i = 5
j = i
j = 3
print(i)

would be 3.

But I got an unexpected result for me, and it was 5.

Moreover, my Python book does cover this example:

i = [1,2,3]
j = i
i[0] = 5
print(j)

The result would be [5,2,3].

What am I understanding wrong?


Solution

  • We call them references. They work like this

    i = 5     # create int(5) instance, bind it to i
    j = i     # bind j to the same int as i
    j = 3     # create int(3) instance, bind it to j
    print i   # i still bound to the int(5), j bound to the int(3)
    

    (Sidenote: Small ints are interned, but that isn't important to this explanation)

    i = [1,2,3]   # create the list instance, and bind it to i
    j = i         # bind j to the same list as i
    i[0] = 5      # change the first item of i
    print j       # j is still bound to the same list as i