a = [1, 2, 3]
b = a
b.append(4)
print(a)
[1, 2, 3, 4]
.
Потому что b = a
создает не копию списка a
, а ссылку на тот же самый объект в памяти. Изменение b
приводит к изменению и a
.
Вопрос: Что выведет следующий код?
a = [1, 2, 3]
b = a
b.append(4)
print(a)
Ответ:
Программа выведет: [1, 2, 3, 4]
Объяснение:
В Python, когда мы присваиваем список одной переменной другой (например, b = a
), мы не создаем новый список. Вместо этого обе переменные (a
и b
) начинают указывать на один и тот же список в памяти. Это называется присваиванием по ссылке.
Когда мы вызываем метод append(4)
для переменной b
, мы изменяем список, на который ссылаются обе переменные a
и b
. Поэтому, когда мы выводим a
, мы видим измененный список [1, 2, 3, 4]
.
Если бы мы хотели, чтобы b
был независимой копией списка a
, мы могли бы использовать один из следующих способов:
b = a[:]
(создание среза)b = list(a)
(создание нового списка из итерируемого объекта)b = a.copy()
(использование метода copy()
, доступного с Python 3)