Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 12, 2013 19:09:50

maglighter
Зарегистрирован: 2013-09-12
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Cтранное поведение вложенного списка

Здравствуйте. являюсь новичком программирования на питоне. Столкнулся с тем, что во время перемножения матриц, которые реализованы при помощи списков, значения элементов выходной матрицы не верны. Проверил алгоритм, все верно. Далее, попробовал пройтись по функции перемножения отладчиком pdb - перемножение происходит верно, но во время записи в список происходит нечто странное:
Имеем матрицу

а = [[1,2,3],[4,5,6]] и b = [[1,2],[3,4],[5,6]]
Имеем список, в который записывается результат. На момент начала перемножения:
с = [[0,0],[0,0]]
Далее перемножаем и складываем значения строки первой матрицы с столбцом второй получаем число 22, а дальше самое интересное: после записи данного значения в матрицу:
(c.mx[0][0] = sum) c =  [[22,0],[22,0]]
Вопрос, почему значение 22 дублировалось во второй строке? Дальше, если записать другое значение в ячейку (0,1), результат также дублируется во второй строке.
Возможно я не доконца в чем то разобрался, если так, то прошу подсказать мне мою ошибку.

Прикрепил исходник. Функция перемножения - mul(a,b).

Отредактировано maglighter (Сен. 12, 2013 19:15:37)

Прикреплённый файлы:
attachment matrix.py (1,3 KБ)

Офлайн

#2 Сен. 12, 2013 20:52:43

sergeek
Зарегистрирован: 2012-06-26
Сообщения: 470
Репутация: +  43  -
Профиль   Отправить e-mail  

Cтранное поведение вложенного списка

жесть какая…
в этом месте

            q = [0] * self.rows
            for i in range(self.cols):
                self.mx.append(q)

q - указатель на список и все элементы в mx заполняются одним и тем же указателем.
так
                self.mx.append([0] * self.rows)
будет ок

Офлайн

#3 Сен. 13, 2013 06:35:35

maglighter
Зарегистрирован: 2013-09-12
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Cтранное поведение вложенного списка

Точно, спасибо!

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version