У меня есть эта функция, которая должна транспонировать список, который он получает. Это работает, но по какой-то причине оно также изменяет исходную матрицу: почему?Пользовательский перенос списка беспорядок вверх по исходной переменной в Python
Matrix = [["1"], ["1","2"], ["1","2","3","4"], []]
def test():
global Matrix # same happens when global or not
tMatrix = Matrix
print(tMatrix) # 1
tMatrix = transposer(Matrix)
print(tMatrix) # 2
print(Matrix) # 3
Выход:
[['1'], ['1', '2'], ['1', '2', '3', '4'], []] # 1
[['1', '1', '1'], ['2', '2'], ['3'], ['4']] # 2
[[], [], [], []] # 3
Я думаю, что это не имеет значения, а вот функция ретранслятор:
def transposer(m):
tm = []
maxi = 0
for i in range(0, len(m)):
maxi = max(maxi, len(m[i]))
for z in range(0, maxi):
row = []
for j in range(0, len(m)):
try:
row.append(m[j].pop(0))
except:
pass
tm.append(row)
return(tm)
Как это возможно, что переменная матрица также влияет даже если функция не вызывается для этой переменной?
Возможно, у вас есть решение для чего? Я понимаю, что это ссылка, как я видел на C++, но там есть возможность ссылаться на привязку. – PascalVKooten
Я их читал, но теперь я понятия не имею, как идти вперед. – PascalVKooten
Проблема заключается в функции транспонирования. Когда вы выполняете 'm [j] .pop (0)', вы удаляете элементы из исходной 'Matrix', которая была передана через' m'. Я редактирую свой ответ, чтобы все было правильно. – Claudio