+= is quadratic and reallocates each call. The better pattern is:

```python
foo = []
for bar in whatever:
  foo.append(bar)
final_string = '\n'.join(foo)
```

You get some allocation overhead as the list grows but save on the more frequent allocations from +=. 

Strings are immutable in python, so they also can't grow