Почему f работает намного быстрее, чем g?
def f(n):
s = ''
for i in range(n):
s = s + 'x'
return s
def g(n):
s, t = '', ''
for i in range(n // 2):
s = t + 'x'
t = s + 'x'
return t
print(len(f(500000))) - 0.1s
print(len(g(500000))) - 7.684s
Возвращаемые значения такие же. Почему f имеет линейную сложность, а g квадратичную?
Да ShadowRanger написал отличный ответ здесь stackoverflow.com/a/40996908/6260170
Кстати, я думаю, что временная сложность не меняется, хотя время вычисления
@Chris_Rands: Это действительно меняется, если строки превышают доступность для этой цели.






CPython имеет специальную оптимизацию для случая
x += yилиx = x + y, гдеxиyявляютсяstr(yможет быть выражением, которое приводит кstr, например,x += 'a' + 'bcd'), и на него нет других ссылок; CPython изменяетstrна месте (технически против правил, но без других ссылок, это не нарушает наблюдаемое поведение).