我在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]]
仍会发生变化。
Matrix之前:
[[7, 8, 9, 24], [0.0, -0.14285714285714235, -0.2857142857142847, -0.42857142857142705],
[0.0, 0.0, -3.0, -3.0000000000000018]]
矩阵之后:
{{1}}
答案 0 :(得分:58)
该行
aux=matriz;
不制作matriz
的副本,它只会创建一个名为matriz
的{{1}}的新引用。你可能想要
aux
假设aux=matriz[:]
是一个简单的数据结构,它将复制一份。如果它更复杂,您应该使用copy.deepcopy
matriz
另外,在每个语句之后你不需要分号,python不会将它们用作EOL标记。
答案 1 :(得分:14)
答案 2 :(得分:4)
aux
不是 matrix
的副本,它只是引用同一个对象的不同名称。
使用copy module创建对象的实际副本。