程序员《做与学系列》

疯狂的Python-08(三子棋之一步取胜法)

2018-09-08  本文已影响1人  景行1023

一些有趣的鲜为人知的Python特性集合

无论你是Python新手还是Python老手,我相信,这个系列的文章都会让你获益良多!

阅读此系列任何文章前请务必观看:疯狂的Python-目录大纲


▶ 三子棋之一步取胜法

# 首先先来初始化一个1*3的一维数组
row = [""]*3 #row i['', '', '']
# 然后再用二维数组模拟一个3*3的棋盘
board = [row]*3

Output:

>>> board
[['', '', ''], ['', '', ''], ['', '', '']]
>>> board[0]
['', '', '']
>>> board[0][0]
''
>>> board[0][0] = "X"
>>> board
[['X', '', ''], ['X', '', ''], ['X', '', '']]

我们只赋值了一个“X”为什么会出来三个呢?

💡 解释:

当我们初始化row变量的时候,下图显示的是内存中的变化

after_row_initialized.png

接着当变量board通过[row]*3初始化后,下图显示了内存的变化(其实最终每一个变量board[0],board[1],board[2]都引用了同一个row对象的内存地址)

after_board_initialized.png

我们可以通过不使用row变量来阻止这种情况的发生

>>> board = [['']*3 for _ in range(3)]
>>> board[0][0] = "X"
>>> board
[['X', '', ''], ['', '', ''], ['', '', '']]

上一篇下一篇

猜你喜欢

热点阅读