Python的字符串复制很诡异啊

标签:Python

在Java语言中,字符串池是个很让初学者困扰的东西,不过在Python里,字符串的行为就更为诡异了。

说理论也没用,我直接给代码。顺便说下,我用的是Python 2.5.4,平台是Windows XP。
>>> id('1')
12393056
>>> a = 1
>>> id(a)
11162832
>>> id(str(a)) #这个是计算出来的'1',和前面的地址相同
12393056
>>> a = '2'
>>> id(a)
12075872
>>> id('2') #这个'2'和前面的a地址相同
12075872
>>> a = '123'
>>> id(a)
12422144
>>> id('123')
12422144
>>> id(a[:]) #这样也不会构建字符串,效率很好
12422144
>>> id(a[1:]) #终于构建了新的
12422176
>>> id('23') #和前面不一样,不够聪明啊
12422208
>>> id('12')
12422208
>>> id(a[:-1]) #看来必须要在生成前有这个字符串,才会直接拿来用
12422208
>>> id('1'+'2')
12422272
>>> id('1'+'2') #相加创建的新字符串不能共享
12422176
>>> id('1'+'2') #重复运行让我囧到了,上句驳回
12422272
>>> id('1'+'2') #这次又变了
12422208
>>> id('%s' % '12') #哇,这样也能共享
12422272
>>> id('%s' % '12') #晕,又变了…
12422176
>>> id('%s%s' % ('1', '2')) #照样共享
12422176
>>> id('%s%s' % ('1', '2')) #再次变化
12422272
>>> id('%s%s' % ('1', '2')) #继续变化
12422240
>>> id('%s%s' % ('1', '2')) #看来有个循环…
12422176
结果真的很诡异啊,不知道有没有人发现过~

而且从结果上看,Python的字符串创建比Java要优秀得多,很多看上去需要创建的字符串都直接重用了。(我没在Java上试验过,但理论上应该是这样。)

2条评论 你不来一发么↓ 顺序排列 倒序排列

    向下滚动可载入更多评论,或者点这里禁止自动加载

    想说点什么呢?