我想在python中使用minimax和alpha-beta修剪来分析一个游戏。伪代码类似于
def alphabeta(node, depth, alpha, beta, isMaxNode):
blah blah
for each child of node
blah blah
在这个特殊的游戏中,计算节点的子节点相当复杂,所以我想定义一个生成器
def children(node):
blah blah
yield child
然后有
for child in children(node)
作为上述for
循环的实现
我担心当阿尔法-贝塔截止发生时会发生什么,因此在for each child
循环中有一个中断,我们永远不会到达生成器的末尾。关闭会发生什么?它是垃圾收集的,还是会有一堆未解决的闭包占用内存
看来我应该知道这个问题的答案。我认为当中断发生时,闭包超出了范围,并且有资格进行垃圾收集,但我不确定
在这个问题中,生成器没有超出范围,编译器必须读取代码并确定生成器没有被再次调用。然而,在我看来,在我在这个问题中提出的情况下,一旦for
循环中发生break
,生成器应该超出范围,并且有资格进行垃圾收集。是这样吗
编辑
再次查看代码,我意识到一旦alpha-beta截止,函数alphabeta
不仅会中断for
循环,还会返回。这使得生成器对象更有可能被垃圾收集,但我对cPython实现的细节一无所知
目前没有回答
相关问题 更多 >
编程相关推荐