using "*" to make a list of lists with repeated (and independent) elements

TP TP at frenoespam.fr.invalid
Wed Sep 26 17:20:10 EDT 2012


Hi everybody,

I have tried, naively, to do the following, so as to make lists quickly:

>>> a=[0]*2
>>> a
[0, 0]
>>> a[0]=3
>>> a
[3, 0]

All is working fine, so I extended the technique to do:

>>> a=[[0]*3]*2
>>> a
[[0, 0, 0], [0, 0, 0]]
>>> a[0][0]=2
>>> a
[[2, 0, 0], [2, 0, 0]]

The behavior is no more expected!
The reason is probably that in the first case, 0 is an integer, not a list, 
so Python copies two elements that are independent.
In the second case, the elements are [0,0,0], which is a list; when Python 
copies a list, he copies in fact the *pointer* to the list, such that we 
obtain this apparently strange behavior.

Is it the correct explanation?
In these conditions, how to make this list [[0,0,0],[0,0,0]] with "*" 
without this behavior?

Thanks,

TP



More information about the Python-list mailing list