Форум сайта python.su
0
Помогите, пожалуйста, найти причину изменеения списка функцией. Список (matrixA) передаю в функцию delta_func в виде копии (при вычислении deltas). В конце концов matrixA все равно изменяется.
def train(matrix): matrixB = [30, 150, 110] matrixA = list(map(list, zip(*matrix))) # список списков размерностью 3 на 3 с целыми числами #------------------------------------------------------------------------------------------------------------------------------ def delta_func(A, B, i): print(id(A)) if i: for index in range(3): A[index][i - 1] = B[index] plus = lambda X: X[0][0]*X[1][1]*X[2][2] + X[0][1]*X[1][2]*X[2][0] + X[0][2]*X[1][0]*X[2][1] return plus(A) - plus([item[::-1] for item in A]) #------------------------------------------------------------------------------------------------------------------------------ delta = delta_func(matrixA, matrixB, 0) deltas = [int(delta_func(matrixA[:], matrixB, i) / delta) for i in range(1, 4)] #------------------------------------------------------------------------------------------------------------------------------ check = lambda x: [360, -360][bool(x)] return [i + check(i) if abs(i) > 180 else i for i in (item % check(item) for item in deltas)]
Отредактировано vananabu (Окт. 15, 2015 13:53:24)
Офлайн
857
vananabuЭто не копия элементов матрицы, а копия указателей на одни и те же строки в ней.delta_func(matrixA[:], matrixB, i)
>>> lst = [[1], [2], [3]] >>> >>> tmp = lst[:] >>> tmp[0][0] = 0 >>> lst [[0], [2], [3]] >>> tmp [[0], [2], [3]] >>>
Отредактировано py.user.next (Окт. 15, 2015 14:06:35)
Офлайн
0
py.user.next
спасибо. действительно это поверхностная копия списка.
Офлайн