title: Networkx copy clarification
body: <p>According the <a href="http://networkx.lanl.gov/reference/generated/networkx.Graph.copy.html" rel="nofollow">doc</a>, it appears that the <code>networkx.copy</code> method does a deep copy of the graph.  I'm most concerned about the statement</p>
  
  <blockquote>
    <p>This makes a complete copy of the graph including all of the node or edge attributes.</p>
  </blockquote>
  
  <p>Is this suggesting that it makes a copy of what the nodes contain as well?  For example if I have the following</p>
  
  <pre><code>class NodeContainer(object):
  
      def __init__(self, stuff):
          self.stuff = stuff
  
      # ..other class stuff
  
  
  g = networkx.DiGraph():
  
  n1 = NodeContainer(stuff1)
  n2 = NodeContainer(stuff2)
  
  g.add_edge(n1,n2)
  
  g2 = g.copy()
  </code></pre>
  
  <p>In the <code>g2 = g.copy()</code> line is it making deep copies of the <code>NodeContainer</code> objects as well?  If so, is there an existing implementation of a shallow copy?  I have not been able to find one.  I ask because I currently have use to create a copy a graph that I will edit (remove nodes from) but not change the actual nodes themselves.  So I don't need a deep copy in that sense, just a representation of the graph structure.</p>
  
  <p><strong>EDIT:</strong> If possible I'd also like to do a shallow <code>reverse()</code></p>