Issue 14719: Lists: [[0]*N]*N != [[0 for _ in range(N)] for __ in range(N)] (original) (raw)

Issue14719

Created on 2012-05-04 04:13 by darrell, last changed 2022-04-11 14:57 by admin. This issue is now closed.

Files
File name Uploaded Description Edit
Screen Shot 2012-05-03 at 9.05.59 PM.png darrell,2012-05-04 04:13
Messages (4)
msg159899 - (view) Author: Darrell Long (darrell) Date: 2012-05-04 04:13
N = 5 board_1 = [[0 for _ in range(N)] for __ in range(N)] is not the same as: board_2= [[0]*N]*N One makes a proper list of lists (the first), the second makes a new kind of animal were board_2[1][1] = 99 changes a whole column. Oddly, testing board_1 == board_2 is True! I'm teaching Python to non-majors, and this is a tough one to explain.
msg159902 - (view) Author: Yuval Greenfield (ubershmekel) * Date: 2012-05-04 06:06
This isn't a bug and should be closed. It's more of a stack overflow question. If you'd like to change this fundamental behavior of a very common operation in python you should make a proposal to the python ideas mailing list at http://mail.python.org/mailman/listinfo/python-ideas In your example board_2 is equivalent to: row = [0] * N board_2 = row * N All the rows are the same initial row. As opposed to board_1 where each row is a new row. Try this: [id(i) for i in board_2] The initial equivalence is because they do represent the same values (NxN list of all zeroes). What should python compare if not by values?
msg159903 - (view) Author: Martin v. Löwis (loewis) * (Python committer) Date: 2012-05-04 06:18
It's actually fairly easy to explain. Just think about it harder (and consider Yuval's explanation).
msg159906 - (view) Author: Ezio Melotti (ezio.melotti) * (Python committer) Date: 2012-05-04 06:45
http://docs.python.org/faq/programming.html#how-do-i-create-a-multidimensional-list http://python.net/crew/mwh/hacks/objectthink.html
History
Date User Action Args
2022-04-11 14:57:29 admin set github: 58924
2012-05-04 06:45:00 ezio.melotti set nosy: + ezio.melottimessages: + stage: resolved
2012-05-04 06🔞54 loewis set status: open -> closednosy: + loewismessages: + resolution: not a bug
2012-05-04 06:06:19 ubershmekel set nosy: + ubershmekelmessages: +
2012-05-04 04:15:56 darrell set type: behavior
2012-05-04 04:13:41 darrell create