Похоже, что использование [] вокруг выражения генератора (test1) ведет себя значительно лучше, чем помещение его в список() (test2). Замедление не существует, когда я просто передаю список в список() для мелкой копии (test3). Почему это?
Доказательства:
from timeit import Timer
t1 = Timer("test1()", "from __main__ import test1")
t2 = Timer("test2()", "from __main__ import test2")
t3 = Timer("test3()", "from __main__ import test3")
x = [34534534, 23423523, 77645645, 345346]
def test1():
[e for e in x]
print t1.timeit()
#0.552290201187
def test2():
list(e for e in x)
print t2.timeit()
#2.38739395142
def test3():
list(x)
print t3.timeit()
#0.515818119049
Машина: 64-разрядная AMD, Ubuntu 8.04, Python 2.7 (r27: 82500)