一些有趣的鲜为人知的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
变量的时候,下图显示的是内存中的变化
接着当变量board
通过[row]*3
初始化后,下图显示了内存的变化(其实最终每一个变量board[0]
,board[1]
,board[2]
都引用了同一个row
对象的内存地址)
我们可以通过不使用row
变量来阻止这种情况的发生
>>> board = [['']*3 for _ in range(3)]
>>> board[0][0] = "X"
>>> board
[['X', '', ''], ['', '', ''], ['', '', '']]
网友评论