-1

I am confused why the below works but the following does not?

Input:

grid = [[0,1,0],[0,0,1],[1,1,1],[0,0,0]]

Working:

def foo(grid):
    m = len(grid)
    n = len(grid[0])
    gridCopy = [[grid[row][col] for col in range(n)] for row in range(m)]
    return gridCopy == grid

Does not work:

def bar(grid):
    m = len(grid)
    n = len(grid[0])
    gridCopy = [[None] * n] * m
    for i in range(m):
        for j in range(n):
            gridCopy[i][j] = grid[i][j]
    return gridCopy == grid

I get the following grid returned from bar():

gridCopy = [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]
Alex
  • 486
  • 1
  • 7
  • 19

1 Answers1

0

You swapped the lengths for each array.

Instead of

gridCopy = [[None] * m] * n

Try

gridCopy = [[None] * n] * m
  • Swapping this results in grid: ``` [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]] ``` – Alex Jun 24 '20 at 22:40