Python学习系列之字符串的创建与驻留机制 (十七)

字符串的驻留机制

1.字符串

  • 在Python中字符串时基本数据类型,是一个不可变的字符序列

2.什么叫字符串驻留机制?

  • 仅保存一份相同且不可变字符串的方法,不同的值被存放在字符串的驻留池中,python的驻留机制对相同的字符串只保留一份拷贝,后续创建相同字符串时,不会开辟新空间,而是把字符串的地址赋给新创建的变量

举例:

'''字符串的驻留机制'''
a='Python'
b="Python"
c='''Python'''
print(a,id(a))
print(b,id(b))
print(c,id(c))

  执行结果:

  说明:a,b,c三个对象的值和内存地址都相同,即当创建了a后,后面新建与a内容相同的变量时,则不会重新开辟新的内存空间,而是直接把已有的内存地址赋值给b和c变量,如下图

  3. 驻留机制的几种情况(交互模式)

  3.1 字符串的长度为0或1时

  

  3.2 符合标识符的字符串(含有数字、字母、下划线是符合标识符的字符串)

  说明:abc%不符合表示字符串,所有各有一个内存地址,abcx符合标识字符串,所以指向的是同一个内存地址

 

  3.3 字符串只在编译时进行驻留,而非运行时

 

   3.4 [-5,256]之间的整数数字

  

  3.5 sys中的intern方法强制2个字符串指向同一个对象

  说明:a,b因为不是符合标识符的字符串,所以它们的内存地址是不一样的,在使用intern()方法后,使得b的内存地址被强制改成和a的内存地址一样,所以进行is运算时值是True

  3.6 PyCharm对字符串进行了优化处理

  举例:(使用PyCharm运行如下代码)

a='abc%'
b='abc%'
print(a is b)

  执行结果如下:

  说明:如果使用终端来执行的话,上面代码输出结果是False,但是使用PyCharm运行,则结果是True,表示PyCharm对代码有做一定的优化。

 

4. 字符串驻留机制的优缺点

  • 当需要值相同的字符串时,可以直接从字符串里拿出来使用,避免频繁的创建和小会,提升效率和节约内存,因此拼接字符串和修改字符串时会比较影响性能的。
  • 在需要进行字符串拼接时建议使用str类型的join方法,而非+,因为join()方法是先计算出所有字符串中的长度,然后再拷贝,只new一次对象,效率要比“+”效率高

 

posted @ 2021-02-23 21:18  寒冰宇若  阅读(167)  评论(0编辑  收藏  举报