Почему элементы оказались связанными?

Детский вопрос к питонистам.

При создании двумерного списка вот так:
matrix = [[0] * 10] *10;
matrix[1][1] = 100;
print matrix;

Получаю значение 100 в каждом вложенном списке.
Такой метод работает по ссылке получается?

Спасибо.
  • Вопрос задан
  • 211 просмотров
Решения вопроса 2
Да, можно даже сказать в каком-то смысле, что в Python все передается по ссылке. Но вот типы данных делятся на mutable и immutable. Списки изменяемы, а числа нет.

Задать массивы можно специальным синтаксисом − списковыми включениями (list comprehension):
matrix = [[0]*10 for x in range(10)]
Ответ написан
Комментировать
anti1869
@anti1869
Списки хранят ссылки на объекты в памяти, а не сами объекты.
В первой строчке вы создали список из 10 ссылок на один объект списка.
Потом поменяли список на который была ссылка.
Соответственно, по остальным ссылкам стало видно измененный объект

Точки с запятой не нужны.

Еще до кучи:

Синтаксис [object] * 10 делает список из 10 ссылок на один и тот же объект
[object for x in range(10)] - список со ссылками на 10 разных объектов

>>> a = [1, 2, 3]
>>> b = a
>>> a[1] = 0
>>> b
[1, 0, 3]
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы