精慕HU
菲利克斯已经提供了一个很好的答案,但我想我会对各种方法进行速度比较:10.59秒(105.9us / itn) - copy.deepcopy(old_list)10.16秒(101.6us / itn) - Copy()使用deepcopy复制类的纯python 方法1.488秒(14.88us / itn) - 纯python Copy()方法不复制类(只有dicts / lists / tuples)0.325秒(3.25us / itn) - for item in old_list: new_list.append(item)0.217秒(2.17us / itn) - [i for i in old_list](列表理解)0.186秒(1.86us / itn) - copy.copy(old_list)0.075秒(0.75us / itn) - list(old_list)0.053秒(0.53us / itn) - new_list = []; new_list.extend(old_list)0.039秒(0.39us / itn) - old_list[:](列表切片)所以最快的是列表切片。但请注意copy.copy(),list[:]并且list(list),与copy.deepcopy()python版本不同,它不会复制列表中的任何列表,字典和类实例,因此如果原件发生更改,它们也会在复制的列表中更改,反之亦然。(这是脚本,如果有人有兴趣或想提出任何问题:)from copy import deepcopyclass old_class: def __init__(self): self.blah = 'blah'class new_class(object): def __init__(self): self.blah = 'blah'dignore = {str: None, unicode: None, int: None, type(None): None}def Copy(obj, use_deepcopy=True): t = type(obj) if t in (list, tuple): if t == tuple: # Convert to a list if a tuple to # allow assigning to when copying is_tuple = True obj = list(obj) else: # Otherwise just do a quick slice copy obj = obj[:] is_tuple = False # Copy each item recursively for x in xrange(len(obj)): if type(obj[x]) in dignore: continue obj[x] = Copy(obj[x], use_deepcopy) if is_tuple: # Convert back into a tuple again obj = tuple(obj) elif t == dict: # Use the fast shallow dict copy() method and copy any # values which aren't immutable (like lists, dicts etc) obj = obj.copy() for k in obj: if type(obj[k]) in dignore: continue obj[k] = Copy(obj[k], use_deepcopy) elif t in dignore: # Numeric or string/unicode? # It's immutable, so ignore it! pass elif use_deepcopy: obj = deepcopy(obj) return objif __name__ == '__main__': import copy from time import time num_times = 100000 L = [None, 'blah', 1, 543.4532, ['foo'], ('bar',), {'blah': 'blah'}, old_class(), new_class()] t = time() for i in xrange(num_times): Copy(L) print 'Custom Copy:', time()-t t = time() for i in xrange(num_times): Copy(L, use_deepcopy=False) print 'Custom Copy Only Copying Lists/Tuples/Dicts (no classes):', time()-t t = time() for i in xrange(num_times): copy.copy(L) print 'copy.copy:', time()-t t = time() for i in xrange(num_times): copy.deepcopy(L) print 'copy.deepcopy:', time()-t t = time() for i in xrange(num_times): L[:] print 'list slicing [:]:', time()-t t = time() for i in xrange(num_times): list(L) print 'list(L):', time()-t t = time() for i in xrange(num_times): [i for i in L] print 'list expression(L):', time()-t t = time() for i in xrange(num_times): a = [] a.extend(L) print 'list extend:', time()-t t = time() for i in xrange(num_times): a = [] for y in L: a.append(y) print 'list append:', time()-t t = time() for i in xrange(num_times): a = [] a.extend(i for i in L) print 'generator expression extend:', time()-t