[code.view]

[top] / python / PyMOTW / copy / copy_recursion.py

     #!/usr/bin/env python
     #
     # Copyright 2007 Doug Hellmann.
     #
     #
     #                         All Rights Reserved
     #
     # Permission to use, copy, modify, and distribute this software and
     # its documentation for any purpose and without fee is hereby
     # granted, provided that the above copyright notice appear in all
     # copies and that both that copyright notice and this permission
     # notice appear in supporting documentation, and that the name of Doug
     # Hellmann not be used in advertising or publicity pertaining to
     # distribution of the software without specific, written prior
     # permission.
     #
     # DOUG HELLMANN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
     # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN
     # NO EVENT SHALL DOUG HELLMANN BE LIABLE FOR ANY SPECIAL, INDIRECT OR
     # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
     # OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
     # NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
     # CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
     #
     
     """Shallow copy example
     
     """
     
     __version__ = "$Id$"
     #end_pymotw_header
     
     import copy
     import pprint
     
     class Graph:
         def __init__(self, name, connections):
             self.name = name
             self.connections = connections
         def addConnection(self, other):
             self.connections.append(other)
         def __repr__(self):
             return '<Graph(%s) id=%s>' % (self.name, id(self))
         def __deepcopy__(self, memo):
             print
             print repr(self)
             not_there = []
             existing = memo.get(self, not_there)
             if existing is not not_there:
                 print '  ALREADY COPIED TO', repr(existing)
                 return existing
             pprint.pprint(memo, indent=4, width=40)
             dup = Graph(copy.deepcopy(self.name, memo), [])
             print '  COPYING TO', repr(dup)
             memo[self] = dup
             for c in self.connections:
                 dup.addConnection(copy.deepcopy(c, memo))
             return dup
     
     root = Graph('root', [])
     a = Graph('a', [root])
     b = Graph('b', [a, root])
     root.addConnection(a)
     root.addConnection(b)
     
     dup = copy.deepcopy(root)
     

[top] / python / PyMOTW / copy / copy_recursion.py

contact | logmethods.com