例如,我需要答应100行hello world,很简单的方法,就是

 s = "hello world\n"
 print s*100

 

当然有时候,不可能这么简单

 s = "hello world\n"
 for i in xrange(100):
     #do something
     s += s


如果你这么去做了,后果就只有一个,死机
先看一个我测试的列子吧

 import time
 a = 'a'*10
 b = time.time()
 for i in range(26):
     a += a
 print time.time()-b #大约花掉35s


时间花掉35s,另外,电脑卡的不行了,内存消耗巨大,看起来很合理的逻辑,为什么会出现这种情况呢。我们看看a += a到底是做了那些事情
首先,a+a得到一个字符串,然后把字符串赋值给a变量,同时会把之前的a变量的回收掉,所以,现在的a和之前的a并不是同一个a

 a = 'aaaaaaaaaa'
 for i in range(10):
     print id(a)
     a += a


输出的是
3075497040
3075500944
3075461216
3075337504
3075516056
167898488
168231584
168232256
168269304
168271896
这种做法我接触过的语言都是这样处理的,简单的来说是通过拼接字符串后得到的新字符串,和原来的不是在同一个内存空间,那之前的就必须被回收掉。

for i in range(26):
    a += a


上面的例子会出现,不断的开辟新的内存空间,有不断的清理垃圾。java中就提供了一个StringBuffer的类,就是为了处理这种情况。
我们在编程的过程中当然不会出现这种情况,如果是这样的呢,从一个大文件里,需要把某些字符地换程另外的字符,写到另外的文件中,下面的代码很可能是一种选择

 s = ''
 for line in open('before.txt'):
     line = line.replace('xx','aa')
     s += line+'\n'
 f = open('after.txt','w')
 f.write(s)
 f.close()


这个糟糕的情况就出现了

拼接字符串不在很多大牛写的程序种出现过吗,难道他们都用的不合理,不是的,这种方式只是在拼接的字符串较大,并且次数多的时候,会出现问题。

总结:有时候我们是倒在细节的脚下,因此不要小看它们。