Почему не меняется выход? - PullRequest
1 голос
/ 11 июня 2019

Я готовлюсь к финалу Python в среду. У меня есть некоторые проблемы со ссылками в списках. Мне нужно какое-то объяснение того, что происходит.

Я пробовал поискать / просмотреть в записях моего учителя безрезультатно

Если у меня есть следующий код Python:

Часть A)

a = [1,2]
b = [1,[2], 3]
c = [a] + [b]
b = 0
print(c)

Еще, если я скажу:

Часть B)

a = [1,2]
b = [1,[2], 3]
c = [a] + [b]
b[0] = -1
print(c)

Часть А) Выход для c = [[1, 2], [1, 2, [3]]]

Почему нельзя распечатать как [[1,2], [0]]?

Часть Б) Вывод c будет = [[1, 2], [-1, [2], 3]]

Похоже, что в этом случае изменяется ссылка на b внутри объекта c, но не в другом.

Я должен нарисовать для этого диаграмму со стрелкой, так что все действительно сбивают с толку то, что происходит со ссылками, и почему, если я изменяю b по индексу, это, кажется, изменит b внутри c, но если я изменю то, что b ссылаясь на, с ссылается на старое значение b до сих пор, а не новое значение b?

1 Ответ

1 голос
/ 11 июня 2019

c = [a] + [b] будет использовать значения переменной a и переменной b, которые оба являются списками. b = 0 изменяет содержимое b, заставляя его забыть о предыдущем значении, которое оно содержало (которое остается неизменным, на него просто больше не ссылается b). b[0] = -1 не меняет b, оно меняет значение b ссылок; поскольку на это значение также ссылается список, который в настоящее время находится в c, вы увидите изменение в c.

Лучший совет, который я имею, - запустить оба фрагмента кода с помощью очень эффективного инструмента визуализации Python: фрагмент 1 vs фрагмент 2 и посмотреть, как работает программа (нажмите Кнопка «Визуализация выполнения»).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...