разница в назначении переменных в Python между целым числом и списком

Я изучаю «Python для анализа данных» Уэса МакКинни. В какой-то момент он говорит: «Присваивая переменную (или имя) в Python, вы создаете ссылку на объект справа от знака равенства. На практике рассмотрим список целых чисел:

      In [8]: a = [1, 2, 3]
In [9]: b = a
In [11]: a.append(4)
In [12]: b

вывод будет:

      Out[12]: [1, 2, 3, 4]

Он рассуждает так: «В некоторых языках присваивание b приведет к копированию данных [1, 2, 3]. В Python a и b фактически теперь относятся к одному и тому же объекту, исходному списку».

Мой вопрос в том, почему то же самое не происходит в случае ниже:

      In [8]: a = 5
In [9]: b = a
In [11]: a +=1
In [12]: b

Где я все еще получаю

      Out[12]: 5

для б?

1 ответ

В первом случае вы создаете список и оба и указываете на этот список. Когда вы изменяете список, обе переменные являются указателями на список, включая его изменения.

Но если вы увеличите значение переменной, указывающей на целое число. 5 по-прежнему 5, вы не меняете целое число. Вы меняете объект, на который указывает переменная. Итак, теперь указывает на значение 6, в то время как все еще указывает на 5. Вы не меняете то, на что указывает, вы меняете ЧТО aуказывает на. bне заботится об этом.

Другие вопросы по тегам