On Tue, 07 Feb 2006 01:01:43 +1100, Steven D'Aprano <[EMAIL PROTECTED]> wrote:
> On Mon, 06 Feb 2006 13:35:10 +0000, Steve Holden wrote: >>> I'm wondering why there is no 'clear' for lists. It feels like a common >>> operation for mutable containers. :-/ >>> >> Because it's just as easy to create and assign a new empty list (and >> have the old unused one garbage collected). >> >> l = [] >> >> is all you need! > Not so. If that logic were correct, then dicts wouldn't need a clear > method either, because you could just assign a new empty dict with d = {}. > But your own sentence tells us why this is not sufficient: because you > aren't emptying the list, you are reassigning (rebinding) the name. The > old list still exists, and there is no guarantee that it will be garbage > collected, because there is no guarantee that it isn't in use somewhere > else: > L = [0,1,2] > D = {"key": L} > L = [] # rebinds the name L, but the list instance still exists That is a red herring. Consider this: L = [object(), object()] O = L[1] L = [] # or insert your favorite list-clearing/emptying statement here What damage is done now that O is still referring to one of the items that used to be in L? The trouble begins when references to "the list to which L refers" end up somewhere else. Then we have to wonder if rebinding L will leave some other block of code with an outdated list. Regards, Dan -- Dan Sommers <http://www.tombstonezero.net/dan/> -- http://mail.python.org/mailman/listinfo/python-list