Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python
- import gc
- from pprint import pprint
- import weakref
- class Graph(object):
- def __init__(self, name):
- self.name = name
- self.other = None
- def set_next(self, other):
- print '%s.set_next(%r)' % (self.name, other)
- self.other = other
- def all_nodes(self):
- "Generate the nodes in the graph sequence."
- yield self
- n = self.other
- while n and n.name != self.name:
- yield n
- n = n.other
- if n is self:
- yield n
- return
- def __str__(self):
- return '->'.join(n.name for n in self.all_nodes())
- def __repr__(self):
- return '<%s at 0x%x name=%s>' % (self.__class__.__name__,
- id(self), self.name)
- def __del__(self):
- print '(Deleting %s)' % self.name
- self.set_next(None)
- def collect_and_show_garbage():
- "Show what garbage is present."
- print 'Collecting...'
- n = gc.collect()
- print 'Unreachable objects:', n
- print 'Garbage:',
- pprint(gc.garbage)
- def demo(graph_factory):
- print 'Set up graph:'
- one = graph_factory('one')
- two = graph_factory('two')
- three = graph_factory('three')
- one.set_next(two)
- two.set_next(three)
- three.set_next(one)
- print
- print 'Graph:'
- print str(one)
- collect_and_show_garbage()
- print
- three = None
- two = None
- print 'After 2 references removed:'
- print str(one)
- collect_and_show_garbage()
- print
- print 'Removing last reference:'
- one = None
- collect_and_show_garbage()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement