【发布时间】:2019-07-14 11:19:43
【问题描述】:
我得到 RuntimeError: dictionary changed size during iteration,我查看了一些堆栈溢出帖子,发现当您在字典循环(插入/删除)时修改字典的大小时会发生这种情况。
但就我而言,我只是在遍历字典,所以我不确定为什么会出现错误。
我发现在使用非集合字典时我没有遇到任何问题,但这使得添加新顶点比使用集合复杂得多。
我知道我可能会制作字典的深层副本并对其进行迭代,但我想首先了解为什么我首先会收到此错误。
我在下面的示例中删除了大部分非必要的代码。
from collections import defaultdict
class Graph:
def __init__(self,vertices):
self.graph = defaultdict(list)
def addEdge(self,u,v):
self.graph[u].append(v)
def fillOrder(self,v,visited, stack):
visited.add(v)
for neighbour in self.graph[v]:
if neighbour not in visited:
self.fillOrder(neighbour, visited, stack)
stack.append(v)
def printSCCs(self):
stack = []
visited = set()
for key in self.graph:
print(key)
self.fillOrder(key, visited, stack)
g = Graph(5)
g.addEdge(1, 0)
g.addEdge(0, 2)
g.addEdge(2, 1)
g.addEdge(0, 3)
g.addEdge(3, 4)
g.printSCCs()
我希望不会抛出错误,并且堆栈会被图中的顶点填充。
【问题讨论】:
标签: python python-3.x dictionary recursion