Python 为什么一个全局列表更新时的值与另一个相同,即使它们从未被告知相等?

Python 为什么一个全局列表更新时的值与另一个相同,即使它们从未被告知相等?,python,list,global-variables,Python,List,Global Variables,我正在尝试在不使用OOP的情况下制作一个简单的扫雷游戏,它有两个列表:一个包含表的值('board[]),另一个应该是空的('Exposed[]) 当我在board_create()中创建一个大小合适的空列表并将其附加到两个列表中时,每当我更改board[]中的值时,列表“discovered[]”中的值都会更改 是的,为“discovered[]”运行函数确实有效,但我只想知道为什么会发生这种情况 board = [] revealed = [] board_size = [] #crea

我正在尝试在不使用OOP的情况下制作一个简单的扫雷游戏,它有两个列表:一个包含表的值('board[]),另一个应该是空的('Exposed[])

当我在board_create()中创建一个大小合适的空列表并将其附加到两个列表中时,每当我更改board[]中的值时,列表“discovered[]”中的值都会更改

是的,为“discovered[]”运行函数确实有效,但我只想知道为什么会发生这种情况

board = []
revealed = []
board_size = []


#creates board with size x,y
def board_create(x, y):
    global revealed
    global board
    global board_size
    board = []
    board_size = [x, y]
    for i in range(y):
        out = []
        for j in range(x):
            out.append(0)
        board.append(out)
        revealed.append(out)
板_创建(3,3)将输出

“board=[[0,0,0],[0,0,0],[0,0,0]]”和“discovered=[[0,0,0],[0,0,0],[0,0]]” 当我在“board[]中更改值时,应该是

“board=[[0,1,x],[0,1,1],[0,0,0]](例如)和“discovered=[[0,0,0],[0,0,0],[0,0]]”

board.append(out)
revealed.append(out)
不是

“board=[[0,1,x],[0,1,1],[0,0,0]]”和“discovered=[0,1,x],[0,1,1],[0,0,0]]”

board.append(out)
revealed.append(out)

您在此处附加到
显示
的内容不是
out
的副本,而是参考。因此,您通过更改
显示的
输出中所做的任何更改都会反映在
板中。要将
复制出来
,请使用切片:
out[:]
。请在此处查看有关此主题的更多信息:

哇,这是一个令人惊讶的功能。谢谢,这正是我想要的。