list IndexError
Alex Martelli
aleaxit at yahoo.com
Mon Dec 27 06:23:03 EST 2004
Scott David Daniels <Scott.Daniels at Acm.Org> wrote:
> Ishwor wrote:
> > On Thu, 23 Dec 2004 13:57:55 -0300, Batista, Facundo
> > <FBatista at unifon.com.ar> wrote:
> >>#- True, true. Maybe you could lobby for copy as a builtin in
> >>#- Python 3000?
> >>
> >>That's a good idea to me. But copy() as a builtin is not clear if it's
> >>shallow or deep.
> >
> > IMHO its preferable to use shallow one as the built-in because deep is
> > expensive op. for CPU. ~;-)
> "deepcopy" is an operation that is less well defined than shallow copy
> anyway (and hence shouldn't be a default). Objects representing
> constants may contain a cache (for example) as an efficiency measure,
> and "deepcopy" needn't copy such objects. The only way to safely
> do deepcopy is to copy down to immutables, but usually there is a
> shallower and faster implementation that depends on application
> semantics.
Well, that's what methods __copy__ and __deepcopy__, or the
often-preferable __getstate__ and __setstate__, are all about -- letting
your classes explicitly define what IS the state (that needs to be
copied) of their instances. I don't see how that changes between
copy/deepcopy being built-ins or being in a standard library module like
today. Yes, deep copy is way more involved and expensive that shallow
copy, etc, etc, but, again, this holds whether they're built-ins or come
from a standard library module.
I guess I must be missing something...?
Alex
More information about the Python-list
mailing list