I just met something really strange of Python:
>>> out=[[0]*3]*3
>>> out
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
>>> out[0][1]
0
>>> out[0][1]=9
>>> out
[[0, 9, 0], [0, 9, 0], [0, 9, 0]]
well, obviously, what I want is :
[[0, 9, 0], [0, 0, 0], [0, 0, 0]]
isn’t strange? I’m not very familiar with Python, but Python always impresses me with its intuitive behavior. But how it comes up with this?
… and how can I get what I need?
thanks!
Watt
A strange behaviour indeed, but that’s only because
*operator makes shallow copies, in your case – shallow copies of[0, 0, 0]list. You can use theid()function to make sure that these internal lists are actually the same:Comprehensions can be used to create different lists as follows: