Python字符串缓存机制

与整数缓存机制类似,Python为常用的字符串也提供了缓存机制。通过给常用的字符串提供缓存,可以避免频繁地分配内存和释放内存,避免内存中出现更多内存碎片,从而提高Python的整体性能。

在命令行模式下,Python为只包含下划线、数字和字母的字符串提供缓存。满足要求的字符串对象第一次创建时建立缓存,以后需要值相同的字符串时,可以直接从缓存池里取用,不用重新创建对象。

下面创建变量a和b,它们都引用值为'abc'的字符串,然后比较它们的值和地址。

code.python
>>> a='abc'
>>> b='abc'
>>> a==b
True
>>> a is b
True

按道理讲,变量a和b引用的是不同的对象,对象具有不同的地址,表达式a is b的返回值应该为False。但是因为Python提供字符串缓存机制,并且字符串'abc'满足字符串只包含下划线、数字和字母的要求,表达式a is b的返回值为True。即变量a和b引用的是同一个字符串对象,它在第一次创建后被放在缓存池中。

下面创建的变量a和b都引用值为'abc 123'的字符串时,因为字符串中包含空格,不满足要求,不能对该字符串提供缓存。所以表达式a is b的返回值为False,即变量a和b引用的是不同的字符串对象。

code.python
>>> a='abc 123'
>>> b='abc 123'
>>> a is b
False