复制的变量会更改原始变量?

2024-05-16 22:23:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我在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)

...

如下所示,尽管aux是由函数solucoes()更改的矩阵,但矩阵matriz已更改。

前矩阵:
[[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]]


Tags: isdef矩阵matrixprintvectorauxdas
3条回答

线路

aux=matriz;

不复制matriz,它只创建名为aux的对matriz的新引用。你可能想要

aux=matriz[:]

假设matriz是一个简单的数据结构,它将生成一个副本。如果它更复杂,您可能应该使用^{}

aux = copy.deepcopy(matriz)

另外,在每个语句后面不需要分号,python不使用它们作为EOL标记。

使用copy模块

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

小号:不需要分号。

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

使用copy module创建对象的实际副本。

相关问题 更多 >