wtfpython阅读笔记

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', '_', '_']]
原文地址:https://www.cnblogs.com/wjw2018/p/10640105.html