Найти - Пользователи
Полная версия: Cтранное поведение вложенного списка
Начало » Python для новичков » Cтранное поведение вложенного списка
1
maglighter
Здравствуйте. являюсь новичком программирования на питоне. Столкнулся с тем, что во время перемножения матриц, которые реализованы при помощи списков, значения элементов выходной матрицы не верны. Проверил алгоритм, все верно. Далее, попробовал пройтись по функции перемножения отладчиком 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).
sergeek
жесть какая…
в этом месте
            q = [0] * self.rows
            for i in range(self.cols):
                self.mx.append(q)

q - указатель на список и все элементы в mx заполняются одним и тем же указателем.
так
                self.mx.append([0] * self.rows)
будет ок
maglighter
Точно, спасибо!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB