美文网首页程序员《做与学系列》
疯狂的Python-08(三子棋之一步取胜法)

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

作者: 景行1023 | 来源:发表于2018-09-08 11:59 被阅读1次

    一些有趣的鲜为人知的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', '', ''], ['', '', ''], ['', '', '']]
    

    相关文章

      网友评论

        本文标题:疯狂的Python-08(三子棋之一步取胜法)

        本文链接:https://www.haomeiwen.com/subject/ugogwftx.html