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 @ 2022-07-27 21:12  小白的进阶之旅  阅读(267)  评论(0)    收藏  举报