На днях выйдет питон 3.3(много годноты), поэтому просто отсос в тему: Шел 2012 год, а в питоне 3.3 добавили методы clear и copy для объектов list и bytearray.
Глотай глубже: In [12]: timeit('list(a)', 'from random import randint; a = [randint(1, x) for x in range(3,10000)]', number=100000) Out[12]: 16.86609411239624
In [13]: timeit('a[:]', 'from random import randint; a = [randint(1, x) for x in range(3,10000)]', number=100000) Out[13]: 17.96528196334839
In [19]: timeit('x = a[:]', 'from random import randint; a = [[randint(1, x) for x in xrange(3,100)] for i in xrange(100)]', number=100000) Out[19]: 0.054429054260253906
In [20]: timeit('x = list(a)', 'from random import randint; a = [[randint(1, x) for x in xrange(3,100)] for i in xrange(100)]', number=100000) Out[20]: 0.08735990524291992
Более того: In [26]: timeit('x = a[:]', 'from random import randint; a = [[[[[1]*10]*10]*10]*10]', number=100000) Out[26]: 0.024785995483398438
In [27]: timeit('x = list(a)', 'from random import randint; a = [[[[[1]*10]*10]*10]*10]', number=100000) Out[27]: 0.0480799674987793
Более того, вот реальный отсос на полностью несинтетическом примере(н-уровневые листы, примем что н=5):
In [85]: %%timeit -n100000 a = (lambda f: (lambda x: f(lambda v: x(x)(v)))(lambda x: f(lambda v: x(x)(v))))(lambda f: (lambda n: [f(n-1) for i in range(8)] if n else 0))(5) ...: x = a[:] ...: 100000 loops, best of 3: 220 ns per loop
In [86]: %%timeit -n100000 a = (lambda f: (lambda x: f(lambda v: x(x)(v)))(lambda x: f(lambda v: x(x)(v))))(lambda f: (lambda n: [f(n-1) for i in range(8)] if n else 0))(5) ...: x = list(a) ...: 100000 loops, best of 3: 367 ns per loop
Не нужны же.
я бы еще накидал ссылок, но в 3.3 столько всего, советую прочитать от корки до корки
зачем? чтоб депрессировать и колоться кактусом? :(
слайсы это НЕЧИТАЕМО
Ты так радуешься как будто там запилили Анус.пёс()
чтобы наконец понять, что 2.7 больше не разрабатывается
Ты ниасилил порст.
просто чистить строку(в данном случае bytearray) присваиванием пустой строки как бы не ок
да поняли давно уже, еще когда в python-ideas писал, по рукам за 2.7 питон били
Учись.
In [1]: l1 = [1, 2, 3, 4]
In [2]: l2 = list(l1)
In [3]: l1[2] = 100
In [4]: print l1, l2
[1, 2, 100, 4] [1, 2, 3, 4]
Работает как конструктор копии в нормальных ЯП.
со? Это неправильно
Prove.
> конструктор копии
> нормальных ЯП
не имеешь ли ты в виду C++?
%timeit себе пруф, пес
Глотай глубже:
In [12]: timeit('list(a)', 'from random import randint; a = [randint(1, x) for x in range(3,10000)]', number=100000)
Out[12]: 16.86609411239624
In [13]: timeit('a[:]', 'from random import randint; a = [randint(1, x) for x in range(3,10000)]', number=100000)
Out[13]: 17.96528196334839
неправильно же делаешь
посоны, скиньте бинарный инсталлер кутиконсоли айпитона под сперм
просто ты объелся синтетики
In [19]: timeit('x = a[:]', 'from random import randint; a = [[randint(1, x) for x in xrange(3,100)] for i in xrange(100)]', number=100000)
Out[19]: 0.054429054260253906
In [20]: timeit('x = list(a)', 'from random import randint; a = [[randint(1, x) for x in xrange(3,100)] for i in xrange(100)]', number=100000)
Out[20]: 0.08735990524291992
Более того:
In [26]: timeit('x = a[:]', 'from random import randint; a = [[[[[1]*10]*10]*10]*10]', number=100000)
Out[26]: 0.024785995483398438
In [27]: timeit('x = list(a)', 'from random import randint; a = [[[[[1]*10]*10]*10]*10]', number=100000)
Out[27]: 0.0480799674987793
Покормил
Более того, вот реальный отсос на полностью несинтетическом примере(н-уровневые листы, примем что н=5):
In [85]: %%timeit -n100000 a = (lambda f: (lambda x: f(lambda v: x(x)(v)))(lambda x: f(lambda v: x(x)(v))))(lambda f: (lambda n: [f(n-1) for i in range(8)] if n else 0))(5)
...: x = a[:]
...:
100000 loops, best of 3: 220 ns per loop
In [86]: %%timeit -n100000 a = (lambda f: (lambda x: f(lambda v: x(x)(v)))(lambda x: f(lambda v: x(x)(v))))(lambda f: (lambda n: [f(n-1) for i in range(8)] if n else 0))(5)
...: x = list(a)
...:
100000 loops, best of 3: 367 ns per loop