Передача переменных по ссылке в Python

В Python переменные, содержащие сложные объекты передаются по ссылке. Это значит, все изменения, сделанные в одной переменной отобразятся на второй. И хотя при таком типе присваивания значений увеличивается риск появления ошибки, зато значительно экономятся ресурсы системной памяти ОС.

Пусть у нас есть два списка:

pythonlst1 = [1, 2, 3, 4, 5]
lst2 = lst1

Поскольку переменной lst2 присвоили значение lst1, теперь в оперативной памяти компьютера хранится один список, на который одновременно ссылаются две переменные.

Давайте изменим первый элемент lst2 и выведем первый список в консоль:

pythonlst2[0] = '!'
print(lst1) # выведет ['!', 2, 3, 4, 5]
Задание 1

Каким будет результат выполнения следующего кода:

pythonlst1 = [1, 2, 3, 4, 5]

lst2 = lst1
lst2[0] = '!'

print(lst1)
Задание 2

Каким будет результат выполнения следующего кода:

pythonlst1 = [1, 2, 3, 4, 5]

lst2 = lst1
lst2[0] = '!'

print(lst2)
Задание 3

Каким будет результат выполнения следующего кода:

pythonlst1 = ['a', 'b', 'c', 'd']

lst2 = lst1
lst3 = 'e'
lst2[2] = lst3

print(lst2)