← Все вопросы

Меняю один список — меняется и второй. Почему?

Задан 8 месяцев назад660 просмотров2 ответа
18
a = [1, 2, 3]
b = a
b.append(4)
print(a)  # [1, 2, 3, 4] — почему a тоже изменился??

Я ведь добавлял в b, а не в a.

2 ответа

13
✓ Принятый ответ — помог автору

Главное правило: присваивание b = a НЕ копирует, а даёт второе имя тому же списку. Нужна копия — пиши b = a[:] или b = a.copy().

Валерий Курочкин автор: вот так сразу уложилось в голове, принято · 8 месяцев назад
24

b = a не копирует список, а делает вторую ссылку на тот же объект. a и b — это одно и то же. Чтобы скопировать:

b = a.copy()      # или a[:]
b.append(4)
print(a)  # [1, 2, 3]

Для вложенных списков нужен copy.deepcopy.

Denis Fadin а для словаря так же работает? · 8 месяцев назад
alex zali вот оно что, ссылки. спасибо большое · 8 месяцев назад

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект