2017-04-06 48 views
0

所以我有這個項目,我正在做的學校,在它我們需要改變名單董事會名單。我們還必須以順序的形式返回我們所做的更改。我defind「板」的元組和組的列表,並提出,在「董事會」修改一組特定的功能,然後我又功能,看起來像這樣:如何在python中保留一個相同的變量,即使它引用的值是變化?

def function (board,pos): 
#pos is a tuple (x,y) 
    begin_open_positions = board[2] 

    disclose_help(board,pos) 
    #this function changes the board 

    end_open_positions = board[2] 
    added_pos = begin_open_positions-end_open_positions 
    return added_pos 
#board at the start = [(4, 4), [(0, 0)], set(), ((0, 0), (0, 1), (0, 1))] 
#board at the end =[(4, 4), [(0, 0)], {(1, 2), ... ,(1, 1)}, ((0, 0),...)] 

的問題是爲什麼我begin_open_position改變,我如何使它不會改變,並保持(在這種情況下)set()。

的披露幫助功能,只是增加了位置登[2]

編輯:我試圖用copy.copy(X)沒有工作

+0

'begin_open_positions'和'end_open_positions'只是'board [0]'處對象的替代名稱。請參閱[其他語言有「變量」,Python有「名稱」](http://python.net/~goodger/projects/pycon/2007/idiomatic/handout.html#other-languages-have-variables) –

回答

1

也許你需要:

import copy 
b = copy.deepcopy(a) 
# apply some changes to `a` will not affect `b` 
+0

this作品。坦克你這麼多。 –

0

你可以使用copy_list=old_list[:] - 創建一個切片

>>> a=[1,2,3] 
>>> a 
[1, 2, 3] 
>>> b=a[:] 
>>> b 
[1, 2, 3] 
>>> b.insert(2,5) 
>>> b 
[1, 2, 5, 3] 
>>> a 
[1, 2, 3] 

可以看出,在修改新名單b,舊列表a保持不變!