Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Copied variable changes the original?

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

like image 213
André Freitas Avatar asked Nov 14 '11 13:11

André Freitas


People also ask

How do you copy variables to another variable in Python?

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.

How do you copy variables?

This is done by selecting the variables in the Variables and Questions tab, right-clicking and selecting Copy and Paste Variable(s) > Exact Copy.

What is the use of changing one variable another?

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.

What is the copy function in Python?

The copy() method returns a copy of the specified list.


1 Answers

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.

like image 153
brc Avatar answered Oct 08 '22 03:10

brc