scared about refrences...
SpreadTooThin
bjobrien62 at gmail.com
Mon Oct 30 17:44:11 EST 2006
Steven D'Aprano wrote:
> 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?
>
I seems that some of the objects in the list don't get along well with
deep copy..
See my second example post that used deepcopy... When run blows up...
>
> --
> Steven.
More information about the Python-list
mailing list