Скопированная переменная меняет оригинал?
У меня простая проблема в Python, которая очень странная.
def estExt(matriz,erro):
# (1) Determinar o vector X das soluções
print ("Matrix after:");
print(matriz);
aux=matriz;
x=solucoes(aux); # IF aux is a copy of matrix, why the matrix is changed??
print ("Matrix before: ");
print(matriz)
...
Как вы видите ниже, матрица matriz
изменяется, несмотря на то, что aux
является тем, который изменяется функцией solucoes()
.
Матрица раньше:
[[7, 8, 9, 24], [8, 9, 10, 27], [9, 10, 8, 27]]
Матрица после:
[[7, 8, 9, 24], [0.0, -0.14285714285714235, -0.2857142857142847, -0.42857142857142705],
[0.0, 0.0, -3.0, -3.0000000000000018]]
Ответы
Ответ 1
Линия
aux=matriz;
Не делает копию matriz
, она просто создает новую ссылку на matriz
с именем aux
. Вероятно, вы хотите
aux=matriz[:]
Что сделает копия, если matriz
- простая структура данных. Если это сложнее, вы должны, вероятно, использовать copy.deepcopy
aux = copy.deepcopy(matriz)
Как и в стороне, вам не нужны полуколоны после каждого утверждения, python не использует их как маркеры EOL.
Ответ 2
Используйте copy module
aux = copy.deepcopy(matriz) # there is copy.copy too for shallow copying
Незначительный: точки с запятой не нужны.
Ответ 3
aux
не является копией matrix
, это просто другое имя, которое относится к одному и тому же объекту.
Используйте модуль копирования для создания фактических копий ваших объектов.