繁体   English   中英

复制变量会改变原始变量吗?

[英]Copied variable changes the original?

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

这条线

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

次要的:不需要分号。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM