Я работаю над проблемой из CTCI.
В третьей проблеме главы 1 вы берете строку, такую как
 'Mr John Smith '
и попросит заменить промежуточные пространства на %20:
 'Mr%20John%20Smith'
Автор предлагает это решение в Python, называя его O (n):
def urlify(string, length):
    '''function replaces single spaces with %20 and removes trailing spaces'''
    counter = 0
    output = ''
    for char in string:
        counter += 1
        if counter > length:
            return output
        elif char == ' ':
            output = output + '%20'
        elif char != ' ':
            output = output + char
    return output
Мой вопрос:
Я понимаю, что это O (n) в терминах сканирования через фактическую строку слева направо. Но не являются ли строки в Python неизменяемыми? Если у меня есть строка, и я добавляю к ней еще одну строку с оператором +, не выделяет ли она необходимое пространство, копирует поверх оригинала, а затем копирует над добавочной строкой?
Если у меня есть набор строк n, каждый из длины 1, то это принимает:
 1 + 2 + 3 + 4 + 5 + ... + n = n(n+1)/2
или O (n ^ 2), да? Или я ошибаюсь в том, как Python обрабатывает добавление?
В качестве альтернативы, если вы захотите научить меня, как ловить рыбу: как я буду искать это для себя? Я не увенчался успехом в попытках Google использовать официальный источник. Я нашел https://wiki.python.org/moin/TimeComplexity, но это ничего не имеет в строках.
