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中是正确的?求大佬赐教
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!