python的驻留机制

在某些情况下,python会使用现有的不可变对象,而不是总是创建一个新对象。驻留的对象在内部使用类似字典的结构(驻留池)进行驻留,节省内存。

原理:系统维护interned字典类型记录已经被驻留的字符串对象,如果a需要驻留,在interned字典中会检测是否存在,存在则指向字符串对象,a的引用次数减1;不存在则记录a到interned字典中。

1.字符串编译时驻留,非运行时不驻留

str1="a"+"b"
print(str1 is "ab") #true  ——在程序运行时,已经处理完成,所以驻留
str2="a"
str3="b"
print(str2+str3 is "ab")#false  ————程序运行时,才开始执行,不进行驻留

2.字符串长度<=1,默认驻留

复制代码
str1=","
str2=","
print(str1 is str2) #true
print(str1 is ",")
_______________________
str1=",,"
str2=",,"
print(str1 is str2) #false
print(str1 is ",,")
复制代码

3.字符串长度大于1,并且只包含数字,字母,下划线,默认驻留

str1="abcd_"
print(str1 is "abcd_")#true
________________
str2="abcd!"
print(str2 is "abcd!")#false

4.字符串由intern模块指定驻留

from sys import intern
str1=intern("!+-?")
print(str1 is "!+-?") #true  

ps:一个问题,为什么在jupyter中执行是错误的,而在pycharm中是正确的?求大佬赐教

 

posted @   小白的进阶之旅  阅读(242)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示