The problem here is that you think of python variables a pointers, where is not bad at all but they don't work like that. You should think of python variables as labels to values. Also you have to think about mutable and inmutable data. Python strings and integers are inmutable, that means that python creates a new number for each operation and reassigns the variable to the new number.
As in your example:
--------------------------------
| 3 | 2 | .. |
--------------------------------
a = 2 # a points to place 1 in our example memmory block
b = a # b points to the same memmory block as a
b = 3 # b change to point to the memmory block where 3 is located, place 0
In case that:
a = 2 # a points to place 1 in our example memmory block
b = a # b points to the same memmory block as a
b += 1 # b == 2, b + 1 == 3, so b will point to a 3, a is still not modified