Развёрнутое пояснение:
1. Создаётся внутренний список ['', '', ''] — три пустые строки.
2. Выражение [внутренний_список] * 3 создаёт новый список из трёх элементов, но каждый элемент — это ссылка на один и тот же внутренний список, а не его независимая копия.
3. Присваивание grid[0][0] = 'X' изменяет первый элемент этого общего внутреннего списка, поэтому все три строки grid отображают одно и то же изменение.
4. print(grid) выводит [['X', '', ''], ['X', '', ''], ['X', '', '']].
Почему это важно: такая инициализация часто встречается при создании матриц, игровых полей, таблиц или двумерных кэшей. Если строки оказываются общим изменяемым объектом, мутация одной ячейки неожиданно распространяется на весь столбец или всю таблицу, что приводит к трудноуловимым багам. Правильный способ — создавать каждую строку отдельно, например, через списочное включение [['' for _ in range(3)] for _ in range(3)].
Post #4874
329
Python: задачки и вопросы
- ✍ 1