Step 6 (S-14681)

From Stepik Wiki
Jump to: navigation, search

Step on Stepik: https://stepik.org/lesson/3368/step/6


S-14681-1.png

То обстоятельство, что списки являются изменяемыми объектами, создает определенные особенности, которые необходимо учитывать, когда вы работаете со списками. Давайте посмотрим что происходит когда мы осуществляем присвоение списков. Создам список а, состоящий из трех элементов:

S-14681-2.png

После этого создадим переменную b и запишем в нее список а. Чему сейчас равны а и b? Выведем списки a, b и убедимся, что выводятся одни и те же значения.

S-14681-3.png

Попробуем изменить первый элемент списка а и посмотреть как изменятся наши переменные.

S-14681-4.png

Ожидаемо, что первый элемент списка а изменился. Интересно,что значение первого элемента списка b тоже изменилось и стало равным 42, хотя мы явно не изменяли список b. Почему так происходит? Для понимания происходящего, нужно вспомнить, что вообще происходит при присвоении. При присвоении списка а, происходит следующее: в памяти компьютера создается объект списка состоящий из трех элементов и переменная а ссылается на этот объект. Когда мы производим присвоение переменной b, переменная b связывается с объектом, на который ссылается а. То есть b указывает на тот же самый список. В момент когда мы изменяем значение а[0] на 42, изменяется непосредственно объект на который ссылается а. И поскольку b по прежнему ссылается на этот объект, при обращении к нему мы увидим измененный список. Аналогичным образом, если мы с помощью переменной b изменим список, изменения будут видны и при обращении к а. Для примера запишем в элемент с индексом 2 списка b число 30.

S-14681-5.png

Такую особенность нужно обязательно учитывать, потому что имея несколько переменных, указывающих на один и тот же изменяемый объект, мы можем случайно изменить значение элемента.