import timeitdef append2x(foo): foo.append(1) foo.append(1)def extend_lst(foo): foo.extend([1,1])def extend_tup(foo): foo.extend((1,1))l1 = []l2 = []l3 = []print timeit.timeit('append2x(l1)',setup = 'from __main__ import append2x,l1')print timeit.timeit('extend_lst(l2)',setup = 'from __main__ import extend_lst,l2')print timeit.timeit('extend_tup(l3)',setup = 'from __main__ import extend_tup,l3')
这是一个简单的基准。我的结果(os-X,10.5.8,core2duo,FWIW):
0.520906925201 #append0.602569103241 #extend-list0.357008934021 #extend-tuple
结果与我的linux盒(Ubuntu,x86-64核心i7)的排序相同:
0.307395935059 #append0.319436073303 #extend-list0.238317012787 #extend-tuple
对我来说,这表示
extend速度比快
append,但与创建a
list相比,创建a相对昂贵
tuple
编辑
在下面的注释中指出,由于元组的不变性,解释器可以优化元组的创建(它会创建一次元组并一遍又一遍地重复使用)。如果我们将代码更改为:
def extend_lst(foo): v = 1 foo.extend([v,v])def extend_tup(foo): v = 1 foo.extend((v,v))
时间实际上是相同的:
0.297003984451 #append0.344678163528 #extend-list0.292304992676 #extend-tuple
尽管在我进行的所有试用中,它
tuple仍然始终胜过列表版本,并且几乎没有超出该
append版本。
有一两件事,我正在远离这一切的是,如果你是循环访问由所有文字的对象,选择
tuple了一个
list。如果它不完全由文字组成,那么选择
list还是都不重要
tuple。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)