This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author ezio.melotti
Recipients docs@python, ezio.melotti, शंतनू
Date 2011-09-10.05:01:05
SpamBayes Score 6.314693e-05
Marked as misclassified No
Message-id <1315630866.23.0.59831138628.issue12951@psf.upfronthosting.co.za>
In-reply-to
Content
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.

See also http://python.net/crew/mwh/hacks/objectthink.html
History
Date User Action Args
2011-09-10 05:01:06ezio.melottisetrecipients: + ezio.melotti, docs@python, शंतनू
2011-09-10 05:01:06ezio.melottisetmessageid: <1315630866.23.0.59831138628.issue12951@psf.upfronthosting.co.za>
2011-09-10 05:01:05ezio.melottilinkissue12951 messages
2011-09-10 05:01:05ezio.melotticreate