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

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

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

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

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

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

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

Похожие вопросы