"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

Reply via email to