On Mon, 30 Oct 2006 13:10:47 -0800, SpreadTooThin wrote: >> > How do I specify or create deep copies of objects that may contain >> > other objects that may contain other object that may contain other >> > objects.... >> >> See the `copy` module especially `copy.deepcopy()`. >> > > This appears to be the right thing to do to me.. (but what do I know?)
Yes, copy.deepcopy() is the thing you want. But remember Fredrik's advice that well-designed Python code should not need to copy data structures often. I don't think I've ever needed to use deepcopy, and rarely copy.copy(). In general, functions should not modify their caller's data. So this is bad practice: def print_list(alist): """Print a sorted list""" alist.sort() # modifies the caller's data -- bad! for index, value in enumerate: print "Value %s at index %d" % (index, value) This is better: def print_list(alist): """Print a sorted list""" alist = alist[:] # makes a local shallow copy of the list alist.sort() # safe to modify now for index, value in enumerate: print "Value %s at index %d" % (index, value) But notice that you only need a shallow copy, not a deep copy, because you aren't modifying the objects within the list, only the list itself. > I tried this which more closely resembles my project but this doesn't > work: Unfortunately my crystal ball is back at the shop being repaired, so you'll have to explain what "doesn't work" means in this case. Does it raise an exception? If so, please post the exception. Does it do something different from what you expected? Then what did you expect, and what did it do? -- Steven. -- http://mail.python.org/mailman/listinfo/python-list