@MrKrot

Python: Почему такой результат этого кода?

x = [[]]*3
x[0].append('a')
x[1].append('b')
x[2].append('c')
x[0]=['d']
print(x) # => [['d'], ['a', 'b', 'c'], ['a', 'b', 'c']]

Почему ответ [['d'], ['a', 'b', 'c'], ['a', 'b', 'c']], а не [['d'], ['b'], ['c']]?
  • Вопрос задан
  • 261 просмотр
Решения вопроса 1
@fireSparrow
Потому что в первой строчке вы не создаёте три разных массива, а создаёте три ссылки на один и тот же пустой массив. Потом вы в этот (один и тот же!) массив последовательно добавляете 'a', 'b', 'c'.
То есть, во второй, третьей и четвёртой строчках кода вы обращаетесь к одному и тому же массиву, просто каждый раз через другую ссылку на него.

В пятой строчке вы затираете одну из этих ссылок, заменяя её на уже другой массив [d]. Но другие две ссылки остаются.

Легко проверить, что эти две ссылки на один и тот же объект.
Если вы допишете в конце программы:

x[1].append('z')
print(x)

То получите:
[['d'], ['a', 'b', 'c', 'z'], ['a', 'b', 'c', 'z']]

Нужно просто чётко понимать разницу между самим объектом и ссылкой на этот объект.
Может существовать много ссылок на один объект.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
11 мая 2024, в 00:19
1000 руб./за проект
10 мая 2024, в 23:51
30000 руб./за проект
10 мая 2024, в 23:33
2500 руб./за проект