Steven D'Aprano <[EMAIL PROTECTED]> wrote: ... > In general: > > - use a list comprehension when you need to calculate the list items > > - use slicing when you are copying an actual list, or if you don't care > what type of object you get > > - use the list() function when your existing object might not be an actual > list, and you want the copy to be a list.
Personally, I don't like the looks of: newlist = oldlist[:] It's always looked more like Perl than Python to me. I prefer: newlist = list(oldlist) There may be a small performance hit (since Python must lookup the name 'list') but it's typically not important (save in extreme bottlenecks:-). It's way faster than copy.copy(oldlist), anyway:-) I particularly like the way "calling the type for shallow copies" is conceptually uniform across types, e.g.: newlist = list(oldlist) newdict = dict(olddict) newtuple = tuple(oldtuple) newset = set(oldset) versus the mishmash one gets by using slicing for the sequences and .copy() for the dict and set. A matter of purely stylistic importance, of course. Alex -- http://mail.python.org/mailman/listinfo/python-list