J'ai un problème simple dans Python qui est très très étrange.
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)
...
Comme vous le voyez ci-dessous, la matrice matriz
est modifiée malgré le fait que aux
est celle qui est modifiée par la fonction solucoes()
.
Matrice avant:[[7, 8, 9, 24], [8, 9, 10, 27], [9, 10, 8, 27]]
Matrice après:[[7, 8, 9, 24], [0.0, -0.14285714285714235, -0.2857142857142847, -0.42857142857142705], [0.0, 0.0, -3.0, -3.0000000000000018]]
La ligne
aux=matriz;
Ne fait pas de copie de matriz
, il crée simplement une nouvelle référence à matriz
nommée aux
. Tu veux probablement
aux=matriz[:]
Ce qui fera une copie, en supposant que matriz
est une structure de données simple. S'il est plus complexe, vous devriez probablement utiliser copy.deepcopy
aux = copy.deepcopy(matriz)
En passant, vous n'avez pas besoin de points-virgules après chaque instruction, python ne les utilise pas comme marqueurs EOL.
Utilisez le module copie
aux = copy.deepcopy(matriz) # there is copy.copy too for shallow copying
Mineure: les points-virgules ne sont pas nécessaires.
aux
n'est pas pas une copie de matrix
, c'est juste un nom différent qui fait référence au même objet.
Utilisez le module de copie pour créer des copies réelles de vos objets.