Это происходит потому, что внутренний список, из которого состоит каждая строка, является тем же объектом, который повторяется.
Вы можете изменить его на
board = [
[' ']*size
for _ in range(size)
]
или использовать понимание двойного списка
size = 4
board = [
[' ' for _ in range(size)]
for _ in range(size)
]
board[0][1] = 'x'
print(board)
, которые оба производят
[[' ', 'x', ' ', ' '], [' ', ' ', ' ', ' '], [' ', ' ', ' ', ' '], [' ', ' ', ' ', ' ']]