A tic-tac-toe where X wins in the first attempt!/一蹴即至!
# 我们先初始化一个变量row row = [""]*3 #row i['', '', ''] # 并创建一个变量board board = [row]*3
输出结果:
>>> board [['', '', ''], ['', '', ''], ['', '', '']] >>> board[0] ['', '', ''] >>> board[0][0] '' >>> board[0][0] = "X" >>> board [['X', '', ''], ['X', '', ''], ['X', '', '']]
当我们初始化 row
变量时, 下面这张图展示了内存中的情况:
而当通过对 row
做乘法来初始化 board
时, 内存中的情况则如下图所示 :(每个元素 board[0]
, board[1]
和 board[2]
都和 row
一样引用了同一列表.)
我们可以通过不使用变量 row
生成 board
来避免这种情况:
>>> board = [['']*3 for _ in range(3)] >>> board[0][0] = "X" >>> board [['X', '', ''], ['', '', ''], ['', '', '']]
还可以利用迭代新建一个列表来避免:
>>> board = [] >>> for i in range(3): >>> row=['_'] * 3 >>> board.append(row) >>> board [['_', '_', '_'], ['_', '_', '_'], ['_', '_', '_']] >>> board[2][0] = 'X' >>> board [['_', '_', '_'], ['_', '_', '_'], ['X', '_', '_']]