For almost a decade now, I've been told to avoid using +=
on strings in Java and Python. Because they are immutable, the +=
creates an entirely new string and has to copy over all the characters from the left-hand side. Thus, putting a +=
in a loop could have your program's complexity degrade into quadratic in some cases if you're not careful.
But then just last week, I learned that CPython actually hands string concatenation smartly! On the Custom Test tab here on Codeforces, the following code runs in just 280ms when submitted to Python 3.8.10.
s = ''
for _ in range(10**6):
s += 'a'
print(len(s))
(In contrast, it badly TLEs when submitting to PyPy 3.7, so I suppose that's one thing Python has over PyPy, but it's not like join
was too hard to do, though, anyway).
Was this a recent change? How long have I been living a lie?