"Licheng Fang" wrote: > But I still wonder why a nested assignment "a = [[0]*3]*3" generates 3 > references to the same list, while the commands below apparently do > not.
that's because they're replacing a list item, rather than modifying it. >>>> a = [0] * 2 >>>> a > [0, 0] <- now you have two references to the same integer. >>>> a[0] = 1 <- now you've *replaced* the first integer with another integer. >>>> a > [1, 0] if you do the same thing with lists, it behaves in exactly the same way: >>> a = [[0]*3]*3 >>> a [[0, 0, 0], [0, 0, 0], [0, 0, 0]] <-- three references to the same list >>> a[0] = [1, 2, 3] <-- replace the first list >>> a [[1, 2, 3], [0, 0, 0], [0, 0, 0]] however, if you modify the *shared* object, the modification will of course be visible everywhere that object is used: >>> a[1][0] = "hello" <-- modified the first item in the shared list >>> a [[1, 2, 3], ['hello', 0, 0], ['hello', 0, 0]] </F> -- http://mail.python.org/mailman/listinfo/python-list