为了方便复制,我在下面附带了一个python文件。
C:\Users\Admin>python
Python 3.9.13 (main, Aug 25 2022, 23:51:50) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32
Warning:
This Python interpreter is in a conda environment, but the environment has
not been activated. Libraries may fail to load. To activate this environment
please see https://conda.io/activation
Type "help", "copyright", "credits" or "license" for more information.
>>> #驻留情况③字符串只在编译时进行驻留,而非运行时
>>> #因为python是一个解释型的语言,实际上他的解释器也可以理解成一种编译器,它负责将python代码编译成字节码,也就是我们说的‘.pyc’文件
>>> #下面我们来进行演示
>>> a='abc'
>>> b='ab'+'c'
>>> c=''.join(['ab','c'])
>>> a is b
True
>>> #发现地址是相同的
>>> a is c
False
>>> #发现地址是不相同的
>>> #现在我们来看看c的内容,下面打印c
>>> c
'abc'
>>> #然后查看c的类型
>>> type(c)
<class 'str'>
>>> #发现c的内容为‘abc’,c的类型为str,那我们再看看a的
>>> a
'abc'
>>> type(a)
<class 'str'>
>>> #会发现是一样的,但是为什么没有产生驻留呢?
>>> #因为b的值是在运行之前就连接完毕了
>>> #c是程序运行的时候通过join方法对列表当中的数据进行连接的,也就是说join操作是在程序运行的时候,程序运行时当然会开辟新的空间存储abc的值,所以c不支持驻留
>>> #驻留情况④从-5到256【-5和256也包括在内】之间的整数数字也是驻留的
>>> #例
>>> f1=-5
>>> f2=-5
>>> f1 is f2
True
>>> s1=-6
>>> s2=-6
>>> f1 is f2
True
>>> s1 is s2
False
>>> #因为-6不在[-5,256]之间,所以不驻留
>>> #python提供了一个sys的类,强制两个相同的字符串指向同一个对象,节约空间,示例如下:
>>> import sys#先导入类
>>> g1='abc%'
>>> g2='abc%'
>>> g1 is g2
False
>>> #内容相同,但是不驻留,下面强制驻留
>>> g1=sys.intern(g2)
>>> g1 is g2
True
>>> #强制驻留了
>>> #为什么我们这两天的驻留不用pycharm展示呢,因为pycharm对字符串进行了优化处理,导致原本不驻留的驻留了
pycharm里面如图所示
s1='abc%'
s2='abc%'
print(s1 is s2)#结果发现驻留了
为什么我们要有驻留机制呢?有什么好处
我们拼接和修改字符串都会产生新的字符串对象所以:
这两天学了驻留机制,总结一下:
'''
驻留机制的几种情况{在交互模式下}
①字符串的长度为0或者1时。
②符合标识符的字符串。
③字符串只在编译时进行驻留,而非运行时。
④[-5,256]之间的整数数字
'''