CPython string addition optimisation failure case
问题 The Question Why, in CPython, does def add_string(n): s = '' for _ in range(n): s += ' ' take linear time, but def add_string_in_list(n): l = [''] for _ in range(n): l[0] += ' ' take quadratic time? Proof: Timer(partial(add_string, 1000000)).timeit(1) #>>> 0.1848409200028982 Timer(partial(add_string, 10000000)).timeit(1) #>>> 1.1123797750042286 Timer(partial(add_string_in_list, 10000)).timeit(1) #>>> 0.0033865350123960525 Timer(partial(add_string_in_list, 100000)).timeit(1) #>>> 0