def initialize_copy(orig)
      @vertex_dict = orig.instance_eval{@vertex_dict}.dup
      @vertex_dict.keys.each do |v|
        @vertex_dict[v] = @vertex_dict[v].dup
      end
      @predecessor_dict = orig.instance_eval{@predecessor_dict}.dup
      @predecessor_dict.keys.each do |v|
        @predecessor_dict[v] = @predecessor_dict[v].dup
      end
    end
def initialize_copy(orig)
      @vertex_dict = orig.instance_eval{@vertex_dict}.dup
      @vertex_dict.keys.each do |v|
        @vertex_dict[v] = @vertex_dict[v].dup
      end
      @predecessor_dict = orig.instance_eval{@predecessor_dict}.dup
      @predecessor_dict.keys.each do |v|
        @predecessor_dict[v] = @predecessor_dict[v].dup
      end
    end
Returns a new empty DirectedAdjacencyGraph which has as its edgelist
 class the given class.  The default edgelist class is Set, to ensure
 set semantics for edges and vertices.

 If other graphs are passed as parameters their vertices and edges are
 added to the new graph.
 Copy internal vertice_dict