populating a doubly-subscripted array

ghw at accutrol.com ghw at accutrol.com
Mon Nov 8 16:56:50 EST 2010


What am I missing?  I am using Python 3.1.2.

ff = [[0.0]*5]*5
ff                        #(lists 5x5 array of 0.0)
for i in range(5):
  for j in range(3):
    ff[i][j] = i*10+j
    print (i,j,ff[i][j])  # correctly prints ff array values

ff                        # try this and see what happens!

result of first print of ff
[[0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0], 
[0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0], 
[0.0, 0.0, 0.0, 0.0, 0.0]]

result of second print of ff
0 0 0
0 1 1
0 2 2
1 0 10
1 1 11
1 2 12
2 0 20
2 1 21
2 2 22
3 0 30
3 1 31
3 2 32
4 0 40
4 1 41
4 2 42

result of third print of ff
[[40, 41, 42, 0.0, 0.0], [40, 41, 42, 0.0, 0.0], 
[40, 41, 42, 0.0, 0.0], [40, 41, 42, 0.0, 0.0], 
[40, 41, 42, 0.0, 0.0]]

Obviously there is something missing in my understanding of 
how array values are populated.  Why do all "rows" get 
populated with the same set of values (40, 41, 42)?  

Thanks for your help,
Hamilton Woods




More information about the Python-list mailing list