разница в назначении переменных в 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
не заботится об этом.