Possible Duplicate:
Python List Index
result=[range(3)]*2
for i in range(len(result)):
result[i][2]=4*i
print result
I would expected [[0, 1, 0], [0, 1, 4]]
Why do I get [[0, 1, 4], [0, 1, 4]]
Thank you!
Possible Duplicate:
Python List Index
result=[range(3)]*2
for i in range(len(result)):
result[i][2]=4*i
print result
I would expected [[0, 1, 0], [0, 1, 4]]
Why do I get [[0, 1, 4], [0, 1, 4]]
Thank you!
When you do [range(3)] * 2
, it makes a list with two references to the same list inside, so modifying result[0]
and result[1]
each modify both.
Use [range(3) for i in range(2)]
to make a list with two different results of range(3)
in it.
meaning:
first time: result[0][2]=4*0
second time: result[1][2]=4*1
which gives you the result [[0, 1, 4], [0, 1, 4]]
This is what is doing step by step.
If you add a "break" to the iteration you see the result is [[0, 1, 0], [0, 1, 0]]
The "result" list works by reference. When it is called, it is pointing to the same object.