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中是正确的?求大佬赐教

浙公网安备 33010602011771号