"Yuanxin Xi" <[EMAIL PROTECTED]> wrote
I'm a Python newbie and still exploring, just surprised to see this
2D list assignment while debugging.
>>> a = [[0] *3] *4
This creates a list with 3 zeros then creates a second list
with 4 references to the first list.
Remember that in Python all variables are references.
>>> a[1][2] = 1
>>> a
[[0, 0, 1], [0, 0, 1], [0, 0, 1], [0, 0, 1]]
why is that a[0][2] a[1][2] a[2][2] a[3][2] are all assigned to 1
Because your list is 4 references to the same list.
You changed the underlying list so all references
reflect the change.
This is a little confusing and inconsistent with almost all other
languages. Could anyone please help
Its not inconsistent with, say C/C++ if you think of a
C array of pointers. Something like (My C is rusty!)
void main()
{
int *ia = {0,0,0};
int **ipa = {ia,ia,ia};
ipa[1][2] = 1;
}
HTH,
--
Alan Gauld
Author of the Learn to Program web site
http://www.freenetpages.co.uk/hp/alan.gauld
_______________________________________________
Tutor maillist - [email protected]
http://mail.python.org/mailman/listinfo/tutor