Hi,
None of the GraphModel.getXXGraph() methods creates a copy of the graph, we can do better than that :) It creates a new Graph object, which you can see as an accessor to the structure, but it doesn't touch the content.
At any time you can get any of these interface and work with. The graph has however a type and not all cast can be done. You can't do
DirectedGraph dg = graph.getGraphModel.getDirectedGraph();
UndirectedGraph ug = (UndirectedGraph)dg;
for example. The model behind serves either HierarchicalDirectedGraph, HierarchicalUndirectedGraph or HierarchicalMixedGraph. For API clarity, you can get simpler interfaces like Graph or DirectedGraph but you will aways have a hierarchical graph behind. So it's always safe to cast to HierarchicalGraph.
Hope this helps
Mathieu