在我的程序中,我需要存储与许多(数十万、百万)游戏板状态相关的数据。为此,我使用一个字典。
class BoardState(object):
def __init__(self, ...):
# ...
self.board = [ [ None ] * self.cols for _ in xrange(self.rows) ]
def __hash__(self):
board_tuple = tuple([ tuple(row) for row in self.board ])
return hash(board_tuple)
# ...
self.board
是一个二维列表,在我的主要用例中,有6行7列。
一开始我使用BoardState
对象对dict
进行索引。但是由于我不会将存储在dict
中的BoardState
对象用于未来的查找之外的其他目的,因此我注意到可以通过使用hash(board_state)
进行索引来节省内存(这个版本使用的内存少了4倍)。
两个不同的BoardState
对象(内部具有不同的board
)在hash
后产生相同值的概率是多少?
为了澄清一下,这是我如何从dict
中存储和检索值的:
board_state = BoardState(...)
my_values[hash(board_state)] = { ... }
...
other_val_with_board_state = source_function()
retrieved = my_values[hash(other_val_with_board_state)]
如我之前提到的,我使用hash()
返回值作为索引来节省内存,因为我后面不会使用BoardState
对象。
更新:现在我在考虑是否使用board_state.board
的字符串表示作为索引是解决我的问题的好方法。