Yes. For the examples you chose the importance isn't clear because you only have two very short strings so the append would probably be faster.
But every time you do a + b
with strings in Python it causes a new allocation and then copies all the bytes from a and b into the new string. If you do this in a loop with lots of strings these bytes have to be copied again, and again, and again and each time the amount that has to be copied gets longer. This gives the quadratic behaviour.
On the other hand, creating a list of strings doesn't copy the contents of the strings - it just copies the references. This is incredibly fast, and runs in linear time. The join method then makes just one memory allocation and copies each string into the correct position only once. This also takes only linear time.
So yes, do use the ''.join
idiom if you are potentially dealing with a large number of strings. For just two strings it doesn't matter.
If you need more convincing, try it for yourself creating a string from 10M characters:
>>> chars = ['a'] * 10000000
>>> r = ''
>>> for c in chars: r += c
>>> print len(r)
Compared with:
>>> chars = ['a'] * 10000000
>>> r = ''.join(chars)
>>> print len(r)
The first method takes about 10 seconds. The second takes under 1 second.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…