所以我正在努力将zobrist哈希应用到我正在进行的一个学校项目中。但是,在初始化随机数表时,打印zTable的输出具有相同的条目(126和127是最后创建的数字)。我知道对于zobrist散列,我应该使用大的64位数字来表示每个片段及其位置。但是在我的游戏里,只有两个棋子,所以我的想法是只要数字是唯一的,那就不重要了。在
经过几轮调试后,我发现正确的数字被分配为程序循环,但是一旦程序退出,当我调用print(zTable)时,数字就不同了。有什么建议吗?谢谢
zTable = [[[None] * 2] * 8] * 8
currNumber = 0
# Initializes the zHashTable for this board
def initTable(self):
for row in range(8):
for col in range(8):
for i in range(2):
self.zTable[row][col][i] = self.currNumber
self.currNumber += 1
下面的代码应该可以工作。请注意,每个子列表的id都不同
^{1}$输出
^{pr2}$在您的代码中(稍微简化了一点),注意每个子列表的id都是相同的
输出
使用
zTable = [[[None] * 2] * 8] * 8
,您在每个副本中引用相同的列表。在而
zTable = [[[None] * 2 for _ in range(8)] for _ in range(8)]
,则每次都创建深拷贝。在相关问题 更多 >
编程相关推荐