Issue 12951: List behavior is different (original) (raw)
URL: http://docs.python.org/library/stdtypes.html
Following example is given.
lists = [[]] * 3 lists [[], [], []] lists[0].append(3) lists [[3], [3], [3]]
Behavior is as follows.
a = [[]] * 3 a [[], [], []] a[0] = 1 a [1, [], []]
Python interpreter details:
$ python Python 2.7.2 (default, Aug 22 2011, 13:53:27) [GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin Type "help", "copyright", "credits" or "license" for more information.
I don't see where is the bug. If you do
lists = [[]] * 3 lists [[], [], []]
you are creating a list that contains 3 references to the same list, as you can see here:
lists[0] is lists[1] is lists[2] True [id(l) for l in lists] [33714832, 33714832, 33714832]
so if you append an element to either of the inner list, it will show up 3 times, because the 3 lists are really the same object:
lists[0].append(3) lists [[3], [3], [3]]
However, if you do
lists[0] = 1 lists [1, [3], [3]]
you are replacing the first element of 'lists' with the int 1. This doesn't mutate the inner list, and therefore the second and third elements are not affected.