python 驻留机制(python代码大全)

网友投稿 431 2022-08-22


python 驻留机制(python代码大全)

1. 字符串驻留机制(引用计数机制):

字符串驻留是一种在内存中仅保存一份相同且不可变字符串的方法。 系统维护interned字典,记录已被驻留的字符串对象。 对于短字符串,将其赋值给多个不同的对象时,内存中只有一个副本,多个对象共享该副本。长字符串不遵守驻留机制 。

python的引用计数机制,并不是对所有的数字,字符串,它只对“ [0-9] [a-z] [A-Z]和"_"(下划线) ”有效,当字符串中由其他字符比如“! @ # ¥ % -”时字符驻留机制是不起作用的。

2. 驻留适用范围:

字符串长度为0或1时,默认采用驻留机制; 字符串长度大于1时,且 字符串中只包含大小写字母、数字、下划线(_) 时,采用驻留机制; 对于 [-5,256]之间的整数数字,Python默认驻留 ; 字符串 只在编译时进行驻留,而非运行时 。Python是解释型语言,但是事实上,它的解释器也可以是理解为是一种编译器,它负责将Python代码翻译成字节码,也就是.pyc文件; 用乘法得到的字符串,如果结果长度 <=20且字符串只包含数字、字母大小写、下划线,支持驻留。长度>20,不支持驻留。这样的设计目的是为了保护.pcy文件不会被错误代码搞的过大。

3. 实例

例子1:带下划线(_)

>>> str1='sten_waves' >>> str2='sten_waves' >>> str1 is str2 True >>> id(str1) 2072034398512 >>> id(str2) 2072034398512

例子2:带空格字符 >>> str3='sten waves' >>> str4='sten waves' >>> str3 is str4 False >>> id(str3) 2072034399920 >>> id(str4) 2072034399856 例子1与例子2可以看出,非数字、字符串、下划线(_)组成的字符串不会触发驻留。

驻留时机: python中的驻留发生在compile_time,而不是run_time。 >>> str1='sten'+'waves' # compile_time >>> str1 is 'stenwaves' True >>> str3='sten' >>> str4=str3+'waves' >>> str4 is 'stenwaves' # run_time False

4.优缺点:

python标识符的不可变性导致了字符串的改动不是采用replace,而是重新创建对象。 为了节省内存,设计字符串的改动通常用join()而非+,因为+会多次创建对象,而join()只创建一次对象。驻留机制会提升一些时间和空间上的性能,但驻留对象也有所消耗。

注:

Pyhton提供intern方法强制2个字符串指向同一个对象 。 >>> import sys >>> a="a*&&" >>> b="a*&&" >>> a is b False >>> a=sys.intern(b) >>> a is b True Python中整型对象存储的位置:

在python中,整形对象存储的位置有所不同,有些整形是预先分配的,一致在内存里,而其他的则在使用时开辟空间。

对于[-5,256]之间的整数数字,Python默认驻留,即预先在内存中分配;


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:极客编程python入门-面向对象5/7(Python极客)
下一篇:关于mybatis
相关文章

 发表评论

暂时没有评论,来抢沙发吧~