Выбор ответа Middle Типы, изменяемость и сравнение спрашивают часто обновлено
Ловушка [[0]*3]*3
Вопрос
Что будет в grid после выполнения?
grid = [[0] * 3] * 3
grid[0][0] = 1
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: [[1, 0, 0], [1, 0, 0], [1, 0, 0]]. Умножение списка копирует ссылки, а не объекты. [[0] 3] 3 даёт внешний список из трёх ссылок на один и тот же внутренний список, поэтому изменение grid[0][0] видно во всех строках.
Варианты ответа
[[1, 0, 0], [0, 0, 0], [0, 0, 0]]TypeError: список нельзя умножать на число[[1, 0, 0], [1, 0, 0], [1, 0, 0]]правильный ответ[[1, 1, 1], [0, 0, 0], [0, 0, 0]]
Разбор
Умножение списка копирует ссылки, а не объекты. [[0] * 3] * 3 даёт внешний список из трёх ссылок на один и тот же внутренний список, поэтому изменение grid[0][0] видно во всех строках. Правильно: [[0] * 3 for _ in range(3)]. Умножение списка на число разрешено, а первый вариант был бы верен только для независимых строк.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.