I have the following simple code:
r = {}
r[1] = [0.000000]
r_new = {}
print r[1][0]
r_new[1] = r[1]
r_new[1][0] = r[1][0] + 0.02
print r[1][0]

It outputs:
0.0
0.02

it is something strange to me since in the first and second case I
output the same variable (r[1][0]) and it the two cases it has
different values (in spite on the fact, that between the 2 outputs I
did not assign a new value to the variable).

Can anybody pleas explain me this strange behavior?

You're referencing into a single mutable object (a list):

  a = [1,2,3]
  b = a
  b[1] = 4
  print a

both r[1] and r_new[1] refer to the same list object, so when the contents of that single list object is changed ("r_new[1][0] = ...") accessing it by either name ("r[1][0]" or "r_new[1][0]") returns the same list.

To create a new list in r_new, use

  r_new[1] = r[1][:]  # copy the contents of the list

-tkc





--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to