# 7.3. The Graph Abstract Data Type¶

The graph abstract data type is defined as a collection of vertices and edges. Vertices may be either connected to each other or isolated. Edges join two vertices and may be weighted.

`Graph()`

creates a new empty graph.`add_vertex(vert)`

adds an instance of`Vertex`

to the graph.`add_edge(from_vert, to_vert)`

adds a new directed edge to the graph that connects two vertices.`add_edge(from_vert, to_vert, weight)`

adds a new weighted directed edge to the graph that connects two vertices.`get_vertex(vert_key)`

finds the vertex in the graph named`vert_key`

.`get_vertices()`

returns the list of all vertices in the graph.`in`

returns`True`

for a statement of the form`vertex in graph`

if the given vertex is in the graph,`False`

otherwise.

Now that we have looked at the definition for the graph ADT,
there are several ways we can implement it in Python. We will see that there are
trade-offs in using different representations to implement the ADT
described above. There are two well-known implementations of a graph,
the **adjacency matrix** and the **adjacency list**. We will explain
both of these options, and then implement one as a Python class.