Переменная для проверки не помогает
Я пишу класс матрицы. Следующий метод должен возвращать матрицу у которой строки i и j поменяны местами, причём inplace при значении True, меняет эти строки и в исходной матрице. self.body - двумерный массив (матрица).
Вопрос: почему переменная inplace ни на что ни влияет (матрица почему-то всегда изменяется не зависимо от значения переменной).
def permutation_of_lines(self, i, j, inplace):
if inplace:
self.body[i], self.body[j] = self.body[j], self.body[i]
return self
else:
result = self.body
result[i], result[j] = result[j], result[i]
return Matrix(result)
Ответы (1 шт):
Автор решения: n1tr0xs
→ Ссылка
По умолчанию Python создает лишь ссылку на объект. Вам нужно использовать модуль copy:
from copy import deepcopy
def permutation_of_lines(self, i, j, inplace):
if inplace:
self.body[i], self.body[j] = self.body[j], self.body[i]
return self
else:
result = deepcopy(self.body)
result[i], result[j] = result[j], result[i]
return Matrix(result)
Либо, если в вашей матрице нет вложенных списков и/или словарей (других сложных структур) можно сделать так:
def permutation_of_lines(self, i, j, inplace):
if inplace:
self.body[i], self.body[j] = self.body[j], self.body[i]
return self
else:
result = self.body.copy()
result[i], result[j] = result[j], result[i]
return Matrix(result)