Дан код:\n``python\na = [[1, 2], [3, 4]]\nb = a.copy()\na[0].append(99)\n`\nБудет ли 99 в b[0]`?

AВ b[0] тоже появится 99: .copy() делает поверхностную копию, вложенные списки общие
BВ b[0] останется [1, 2] без изменений: метод .copy() рекурсивно копирует вложенные списки
CБудет исключение TypeError при a[0].append(99): вложенный список после .copy() только для чтения
DВ исходном a ничего не изменится: a[0].append(99) создаст новый вложенный список вместо старого
Правильный ответ. Метод .copy() создаёт поверхностную копию: внешний список новый, но вложенные объекты остаются теми же.

Разбор

При поверхностной копии (.copy() или list(a)) создаётся новый внешний список, но его элементы — те же объекты. Поэтому a[0] и b[0] ссылаются на один и тот же вложенный список. Вызов a[0].append(99) модифицирует этот общий список, и 99 будет виден через b[0]. Для полной независимости используйте copy.deepcopy(a), который рекурсивно копирует все вложенные объекты.

Проверь себя · 1/3разбор после ответа
Есть пустой словарь groups = {}. Что произойдёт при выполнении groups.setdefault('RU', []).append(7)?
Тренировать Python в Telegram

Ещё вопросы по теме «Коллекции и структуры данных»