Advertisement
rfmonk

pickle_cycle.py

Jan 29th, 2014
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.44 KB | None | 0 0
  1. #1/usr/bin/env python
  2.  
  3. # this is from The Python
  4. # Standard Library by example
  5. # ISBN13: 9780321767349
  6.  
  7. import pickle
  8.  
  9.  
  10. class Node(object):
  11.     """A simple digraph """
  12.     def __init__(self, name):
  13.         self.name = name
  14.         self.connections = []
  15.  
  16.     def add_edge(self, node):
  17.         "Create an edge between this node and the other."
  18.         self.connections.append(node)
  19.  
  20.     def __iter__(self):
  21.         return iter(self.connections)
  22.  
  23.  
  24. def preorder_traversal(root, seen=None, parent=None):
  25.     """Generator function to yield the edges in a graph.
  26.    """
  27.     if seen is None:
  28.         seen = set()
  29.     yield (parent, root)
  30.     if root in seen:
  31.         return
  32.     seen.add(root)
  33.     for node in root:
  34.         for parent, subnode in preorder_traversal(node, seen, root):
  35.             yield (parent, subnode)
  36.  
  37.  
  38. def show_edges(root):
  39.     "Print all the edges in the graph."
  40.     for parent, child in preorder_traversal(root):
  41.         if not parent:
  42.             continue
  43.         print '%5s -> %2s (%s)' % \
  44.             (parent.name, child.name, id(child))
  45.  
  46. # Set up the nodes.
  47. root = Node('root')
  48. a = Node('a')
  49. b = Node('b')
  50. c = Node('c')
  51.  
  52. # Add edges between them.
  53. root.add_edge(a)
  54. root.add_edge(b)
  55. a.add_edge(b)
  56. b.add_edge(a)
  57. b.add_edge(c)
  58. a.add_edge(a)
  59.  
  60. print 'ORIGINAL GRAPH:'
  61. show_edges(root)
  62.  
  63.  
  64. # Pickle and unpickle the graph to create
  65. # a new set of nodes.
  66. dumped = pickle.dumps(root)
  67. reloaded = pickle.loads(dumped)
  68.  
  69. print '\nRELOADED GRAPH:'
  70. show_edges(reloaded)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement