List copying idiom was Re: [Python-Dev] implementation of copy standard lib
Tom Anderson
twic at urchin.earth.li
Tue Aug 16 20:00:48 EDT 2005
On Tue, 16 Aug 2005, Ron Adam wrote:
> Simon Brunning wrote:
>
>> On 8/14/05, Martijn Brouwer <e.a.m.brouwer at alumnus.utwente.nl> wrote:
>>
>>> I can imagine that *a lot* of libs/scripts use the copy library,
>>
>> I think that copy is very rarely used. I don't think I've ever imported it.
>
> I use copy.deepcopy() sometimes, and more often [:] with lists.
> Dictionary objects have a copy method. All non mutable objects are
> copies.
When you say [:], do you mean that you copy lists like this:
l = someList()
m = []
m[:] = l
?
That's what i've been doing. The other day, i realised that i could just
do:
l = someList()
m = list(l)
The same works for copying dicts. Whilst it's still not utterly obvious
that what this is about is making a copy, it's more obvious, cleaner,
shorter and probably faster than the slice assignment, which is really
kludgy (almost intercalorific, in fact - or even perlish!).
> I too have wondered why copy isn't a builtin,
Same here. It seems like a sort of obvious thing to have, and could
probably implemented much more simply and quickly in the interpreter.
You'd probably want a __copy__ hook for classes which want special
handling, and just do a normal deep copy for everything else.
tom
--
Orange paint menace
More information about the Python-list
mailing list