复制变量改变原来的?

我在 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.000000000000018]

125564 次浏览

aux没有matrix的一个副本,它只是引用同一个对象的不同名称。

使用 复制模块创建对象的实际副本。

排队

aux=matriz;

不创建 matriz的副本,它只是创建一个名为 aux的对 matriz的新引用。你可能需要

aux=matriz[:]

假设 matriz是一个简单的数据结构,它将生成一个副本。如果它比较复杂,那么您可能应该使用 copy.deepcopy

aux = copy.deepcopy(matriz)

顺便说一句,在每个语句之后您不需要分号,python 不使用它们作为 EOL 标记。

使用 收到模块

aux = copy.deepcopy(matriz) # there is copy.copy too for shallow copying

次要的一个: 不需要分号。