Please see this question for streamlined version with no clutter
I am writing a gravity simulation. The structure of my code is:
A
solutionarray - this contains the (already computed) solution for the system of masses. Because of the nature of solving differential equations in Python, all the relevant values (each component of position and velocity for every mass at every time value) are in a thesolutionarray.An array
masses. The objects here contain all the information about every mass including the arraysx_historywhich I am trying to update below.No. of dimensions
d. Here I have used 2 for simplicity.
I have the following code:
d = 2
for i in range(len(masses)): # loop through masses
for k in range(len(solution)): # loop through solution to obtain values at each timestep
x = [] # d dimensional x vector at current timestep
# fill the x-vector
for j in range(d):
x.append(solution[k][d * i + j])
masses[i].x_history.append(x)
The idea is simply to loop through the objects in the masses array, abstract the relevant information from another array (x arrays representing vectors), and add it to the x_history arrays in the mass objects.
The problem is (I have checked this by debugging) in the lines:
masses[i].x_history.append(x)
Rather than appending to masses[i].x_history for the current value of i, the code appends it to the x_history array for all the objects in the masses list, meaning that at the end of the outer loop every object in the masses list contains all the information rather than only its own.
Does anyone have any idea as to why this might be the case? Am I accidentally vectorizing this operation or something?