Function in Python Setting Global Variables (without intent)
我不知道这是否是其他人遇到的问题,但我在Python中有这样的代码:
1 2 3 4 | def makemove(board,move,val): new=board new[move[0]][move[1]]=val return new |
我的问题是,如果我仅仅通过执行makemove(游戏,[0,1],-1)使用这个函数,其中游戏等于[[0,0,1],[0,1,0],[1,0,0]],变量游戏变成[[0,-1,1],[0,1,0],[1,0,0]]。
我试过研究设置全局变量的函数,但是我没有找到一种方法来阻止makemove()设置您输入的变量。有什么明显的东西我不见了吗?
您需要克隆
1 2 | import new = copy.deepcopy(board) |
其他方法请参见https://stackoverflow.com/a/2612815/93910。
您的代码将变量的元素设置为"引用"。换句话说,您的变量
下面是另一个如何思考的答案:https://stackoverflow.com/a/9697367/93910
这基本上是因为在Python中的赋值并不意味着您认为它可以做什么,而且列表是可变序列。
列表是python对象。名称
在Python中,每个对象都有一个唯一的标识符,您可以使用
1 2 3 4 5 6 | In [1]: board = [[0,0,1],[0,1,0],[1,0,0]] In [2]: new = board In [3]: id(new), id(board) Out[3]: (34495504136, 34495504136) |
因为列表是可变序列,所以您可以在不出错的情况下更改它。
因此,如果您想在不修改原始序列的情况下使用函数内的任何可变序列,则应首先使用