I have a simple problem in Python that is very very strange.
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) ...
As you see below, the matrix matriz
is changed in spite of the fact that aux
is the one being changed by the function solucoes()
.
Matrix before:[[7, 8, 9, 24], [8, 9, 10, 27], [9, 10, 8, 27]]
Matrix after:[[7, 8, 9, 24], [0.0, -0.14285714285714235, -0.2857142857142847, -0.42857142857142705], [0.0, 0.0, -3.0, -3.0000000000000018]]
In Python, we use = operator to create a copy of an object. You may think that this creates a new object; it doesn't. It only creates a new variable that shares the reference of the original object. Let's take an example where we create a list named old_list and pass an object reference to new_list using = operator.
This is done by selecting the variables in the Variables and Questions tab, right-clicking and selecting Copy and Paste Variable(s) > Exact Copy.
In mathematics, a change of variables is a basic technique used to simplify problems in which the original variables are replaced with functions of other variables. The intent is that when expressed in new variables, the problem may become simpler, or equivalent to a better understood problem.
The copy() method returns a copy of the specified list.
The line
aux=matriz;
Does not make a copy of matriz
, it merely creates a new reference to matriz
named aux
. You probably want
aux=matriz[:]
Which will make a copy, assuming matriz
is a simple data structure. If it is more complex, you should probably use copy.deepcopy
aux = copy.deepcopy(matriz)
As an aside, you don't need semi-colons after each statement, python doesn't use them as EOL markers.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With