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