1.字符串驻留机制(引用计数机制):
1. 字符串驻留是一种在内存中仅保存一份相同且不可变字符串的方法。
2.系统维护interned字典,记录已被驻留的字符串对象。
3. 对于短字符串,将其赋值给多个不同的对象时,内存中只有一个副本,多个对象共享该副本。长字符串不遵守驻留机制 。
4.python的引用计数机制,并不是对所有的数字,字符串,它只对“ [0-9] [a-z] [A-Z]和"_"(下划线) ”有效,当字符串中由其他字符比如“! @ # ¥ % -”时字符驻留机制是不起作用的。
5.字符串驻留机制的引入大量节省了程序内存占用
6.字符串驻留机制只适用于程序编译时非运行时
2.驻留适用范围:
字符串长度为0或1时,默认采用驻留机制;
字符串长度大于1时,且 字符串中只包含大小写字母、数字、下划线(_) 时,采用驻留机制;
对于 [-5,256]之间的整数数字,Python默认驻留 ;
字符串 只在编译时进行驻留,而非运行时 。Python是解释型语言,但是事实上,它的解释器也可以是理解为是一种编译器,它负责将Python代码翻译成字节码,也就是.pyc文件;
用乘法得到的字符串,如果结果长度 <=20且字符串只包含数字、字母大小写、下划线,支持驻留。长度>20,不支持驻留。这样的设计目的是为了保护.pcy文件不会被错误代码搞的过大。
3.示例
3.1包含字母字符串[a-z]/[A-Z] 的字符串驻留
>>> a = "hello"
>>> b = "hello"
>>> a is b
True
3.2包含字母下划线的字符串驻留
>>> a = "1_2"
>>> b = "1_2"
>>> a is b
True
3.3长度为0或者1的字符串驻留
>>> a = ""
>>> b = ""
>>> a is b
True
>>> a = "!"
>>> b = "!"
>>> a is b
True
>>>
3.4驻留时机:python中的驻留发生在compile_time,而不是run_time。
# run_time
>>> a = "hello01"
>>> b = "hello"
>>> b + "01" is a
False
# compile_time
>>> a = "hello01"
>>> b = "hello" +"01"
>>> a is b
True
>>>
4.有需要交流学习Python技术或者需要学习资料的可以找我交流学习WeChat(it5101)