I am trying to run the following code recursively, where "vetor" is the current state of several variables and I am storing the first 50 in "matriz", a 2d array with 50 lines and 10 columns. Everything is initialized as zero.
What happens is that in the first iteration, the first line takes the value of the current "vetor". So far so good, but then in the second loop the "vetor" value is assigned to both the second AND the first line of "matriz". In the last iteration, for example, all lines of "matriz" are equal to the last value of "vetor".
I study control engineering and primarily program in C or MATLAB, so I am kinda newbie in Python...
Below, the part of the code described, where I believe the problem is.
#armazena as variáveis do estado
#armazena o vetor de estado como linha na matriz
When you have an assignment
a = b (
matriz[cnt]=vetor in your case) in c/c++ the copy/asignment constructor is called and the content of the object is essentially copied. No matter whether the type of
a is a primitive type like
In python however the variables
b are references to objects, like c++ references or c-pointers (but without the pointer dereferencing syntax).
The c-programmer might think that modifying
a will not change
b, but this is not the case in the following snippet
a = [1, 2, 3] b = a a.append(42) print(b)
[1, 2, 3, 42] because
b are both references to the same object (in memory).
To solve this you need to explicitly copy
vetor before assigning it to
matriz[cnt]. Have a look at Shallow and deep copy operations. Deep copy is likely what you need.
vetor is a
list a simple constructor call will do the trick: