Depth First Search Using Stack in Python
Lists in Python are already stacks. It would be better if you used a raw list as people are more familiar with lists then a custom Stack class.
When using a plain Python list the while loop can take advantage of lists being truthy if they have items. This allows you to do while stack: instead.
I would prefer this to be a generator function as we likely won't need the entire DFS path. path can then be a set for \$O(1)\$ lookup rather than a list with \$O(n)\$ lookup. (&quot;if vertex in path:&quot;)
def depth_first_search(graph, start):
    stack = [start]
    visited = set()
    while stack:
        vertex = stack.pop()
        if vertex in visited:
            continue
        yield vertex
        visited.add(vertex)
        for neighbor in graph[vertex]:
            stack.append(neighbor)