目录
(3)验证“字符串只在编译时进行驻留,而非运行时”的驻留机制
1、什么是字符串驻留机制?
字符串和元组都是不可变序列
如示例所示:a,b,c无论是用的单引号、双引号还是三引号,它里面的字符串内容都是Python,他们指向的内存地址都是。。。4560。这就是字符串的驻留机制。
2、何种情况有驻留机制?
那么都何种情况有驻留机制呢?(交互模式)
a.字符串的长度是0或者1时
b.符合标识符的字符串
c.字符串只在编译时进行驻留,而非运行时
d. [-5,256]之间的整数数字
由于要使用交互模式,于是我们打开cmd
(1)验证“字符串的长度是0或者1时”的驻留机制
由上图可见,当字符串是空字符或长度为1的字符时,判断地址是否相同时是TRUE。
通过使用id()函数我们能看到地址确实是一样的。
(2)验证“符合标识符的字符串”的驻留机制
首先要明白什么是符合标识符的字符串,符合标识符的字符串就是:字母、数字、下划线,出现别的东西就不符合标识符了。由图中我们可以看到,符合标识符的字符串符合驻留机制,它们的地址是一样的。
(3)验证“字符串只在编译时进行驻留,而非运行时”的驻留机制
这里的a就是现成的字符串abc;b是将ab和c拼接起来的,注意这里的拼接操作是程序操作之前就拼接好了;最后的c也是拼接操作,只不过用的是join函数,注意这里的拼接操作是程序进行时操作的。
因此c既然是运行时进行操作的,那么它是不符合驻留机制的,而a和b是符合字符串的驻留机制的。
(4)验证“[-5,256]之间的整数数字”的驻留机制
在那个范围里的数字是有驻留机制的。
PS:当不符合驻留机制时,可以调用sys.intern()函数强制驻留。
这里的a就通过sys.intern()函数进行强制驻留了。因此a is b的结果就是TRUE了。
3、字符串的驻留机制有什么用?
当需要值相同的字符串时,可以直接从字符串池里拿来使用,避免频繁的创建和销毁,提升效率和节约内存,因此拼接字符串和修改字符串是会比较影响性能的。
当需要进行字符串拼接时建议使用str类型的join方法,而非”+” , 因为join方法是先计算出所有字符中的长度,然后再拷贝,只new一次对象,效率比”+”效率高。