[Python-ideas] clear() method for lists
Raymond Hettinger
raymond.hettinger at gmail.com
Wed Feb 10 18:10:58 CET 2010
On Feb 10, 2010, at 6:54 AM, Gerald Britton wrote:
> Yes, I plan to ask for copy() as well, when the bug tracker opens up
> for 3.3, 3.4, etc. The issue is not, "Is there already a way to do
> this?" but rather, "Can we have consistent interfaces in the sequence
> types and collections where possible and appropriate?"
Use the copy module.
> dict() and set() already support both clear() and copy() methods.
> Previous posters have pointed to the disconnect and showed the problem
> of having to test if a given iterable supports the clear() method
> before calling it, in functions that take any iterable.
>
> Also, for what it's worth:
>
> s1 = set()
> s2 = s1.copy()
>
> is faster than
>
> s1 = set()
> s2 = set(s1)
I question your timing skills. Both call the same routine to do the work
of copying entries:
set_copy() calls make_new_set() which calls set_update_internal()
set_init() calls set_update_internal()
If there is any difference at all, it is the constant overhead of passing
an argument to set(), not the implementation itself. The actual
set building work is the same.
> (and also for dict()) probably because the first is
> specifically-written for the copy operation whereas the second
> actually iterates over s1, one item at a time. (At least I think
> that's what's going on). I suppose that a list().copy() method might
> also be faster than the other two approaches to copy a list.
You need to read some code, learn about ref counts, etc.
There's more to list copying than a memcpy().
If list.copy() were added, it would use that same underlying
code as list(s) and s[:]. There would be no speed-up.
> Lastly, for completeness, I suppose copy() might be appropriate for
> both tuple and deque as well.
Tuples? Really?
An immutable collection is its own copy.
Raymond
More information about the Python-ideas
mailing list