Проблема здесь в том, что вы думаете о переменных Python как о указателях, где это совсем не плохо, но они так не работают.Вы должны думать о переменных Python как о метках значений.Также вы должны подумать об изменчивых и неизменных данных.Строки и целые числа Python являются неизменяемыми, это означает, что python создает новый номер для каждой операции и переназначает переменную на новый номер.
Как в вашем примере:
--------------------------------
| 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
В случае, если это:
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