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.

classification
Title: List behavior is different
Type: behavior Stage: resolved
Components: Documentation Versions: Python 2.7
process
Status: closed Resolution: not a bug
Dependencies: Superseder:
Assigned To: docs@python Nosy List: amaury.forgeotdarc, docs@python, ezio.melotti, शंतनू
Priority: normal Keywords:

Created on 2011-09-09 19:29 by शंतनू, last changed 2022-04-11 14:57 by admin. This issue is now closed.

Messages (3)
msg143793 - (view) Author: शंतनू (शंतनू) Date: 2011-09-09 19:29
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.
msg143828 - (view) Author: Ezio Melotti (ezio.melotti) * (Python committer) Date: 2011-09-10 05:01
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
msg143834 - (view) Author: Amaury Forgeot d'Arc (amaury.forgeotdarc) * (Python committer) Date: 2011-09-10 08:41
See also http://docs.python.org/faq/programming.html#how-do-i-create-a-multidimensional-list
History
Date User Action Args
2022-04-11 14:57:21adminsetgithub: 57160
2011-09-10 08:41:45amaury.forgeotdarcsetnosy: + amaury.forgeotdarc
messages: + msg143834
2011-09-10 05:01:05ezio.melottisetstatus: open -> closed

nosy: + ezio.melotti
messages: + msg143828

resolution: not a bug
stage: resolved
2011-09-09 19:29:03शंतनूcreate