Rou*_*mar 2 python return-value function-declaration
我是Python的新手(和整个编程).我很确定答案很明显,但我真的不知道该怎么做.
def do_play(value, slot, board):
temp=board
(i,j) = slot
temp[i][j] = value
return temp
Run Code Online (Sandbox Code Playgroud)
board是列表.value是一个整数.slot是和整数元组.
我想在这里做的是
当我运行它是shell时,原始列表(板)和新列表(temp)都会发生变化.=
任何帮助,将不胜感激.
unu*_*tbu 10
temp=board不会成为新的董事会.它使temp变量引用与列表完全相同board.所以也要改变temp[i][j]变化board[i][j].
要制作副本,请使用
import copy
temp=copy.deepcopy(board)
Run Code Online (Sandbox Code Playgroud)
请注意,temp=board[:]make temp引用一个新列表(不同于board,但内容(即列表中的列表)仍然相同:
In [158]: board=[[1,2],[3,4]]
In [159]: temp=board[:]
Run Code Online (Sandbox Code Playgroud)
修改也会temp修改board:
In [161]: temp[1][0]=100
In [162]: temp
Out[162]: [[1, 2], [100, 4]]
In [163]: board
Out[163]: [[1, 2], [100, 4]]
Run Code Online (Sandbox Code Playgroud)
id显示对象的内存地址.这显示temp并且board是不同的列表:
In [172]: id(temp)
Out[172]: 176446508
In [173]: id(board)
Out[173]: 178068780 # The ids don't match
Run Code Online (Sandbox Code Playgroud)
但这显示内部的第二个列表temp是内部相同的列表board:
In [174]: id(temp[1])
Out[174]: 178827948
In [175]: id(board[1])
Out[175]: 178827948 # The ids are the same
Run Code Online (Sandbox Code Playgroud)
但是如果你使用copy.deepcopy,那么列表中的列表也会被复制,如果修改temp是board保持不变,你需要的是:
In [164]: import copy
In [165]: board=[[1,2],[3,4]]
In [166]: temp=copy.deepcopy(board)
In [167]: temp[1][0]=100
In [168]: temp
Out[168]: [[1, 2], [100, 4]]
In [169]: board
Out[169]: [[1, 2], [3, 4]]
Run Code Online (Sandbox Code Playgroud)
你想复制board吗?
temp = board[:]
Run Code Online (Sandbox Code Playgroud)
或者这可能是复制结构.
temp = [ r[:] for r in board ]
Run Code Online (Sandbox Code Playgroud)