-1

why this code:

grid = [[" "] * 10] * 5

for c in range(10):
  grid[0][c] = '#'

for r in grid:
  print(r)

outputs this?

['#', '#', '#', '#', '#', '#', '#', '#', '#', '#']
['#', '#', '#', '#', '#', '#', '#', '#', '#', '#']
['#', '#', '#', '#', '#', '#', '#', '#', '#', '#']
['#', '#', '#', '#', '#', '#', '#', '#', '#', '#']
['#', '#', '#', '#', '#', '#', '#', '#', '#', '#']

I'm fixing the first index to be 0. No other sublist should change.

1 Answers1

2

You need to create new values and not reference them again!

grid = [[" " for _ in range(10)] for __ in range(5)] 

for c in range(10):
  grid[0][c] = '#'

for r in grid:
  print(r)
['#', '#', '#', '#', '#', '#', '#', '#', '#', '#']
[' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ']
[' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ']
[' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ']
[' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ']
Kuldeep Singh Sidhu
  • 3,748
  • 2
  • 12
  • 22