python基础进阶
‘=’、‘==’ &is的区别
简单的区分
在python中一个等号表示赋值;
两个等号表示比较,比较两个数值是否相等;
is 是通过比较内存地址来判断是否相等;
is
li1=[1,2,3] li2=li1 print(li1 is li2)#对于li1和li2在内存中实际上都是共用一个列表[1,2,3],所以两个列表是相等的;这样改变li1中的一个值就改变了li2 print(id(li1),id(li2))#可以利用id来具体显示出在内存中存储的地址,通过结果可知两个列表在内存中地址完全一致 D:\anoconda\python.exe F:/python/python学习/人工智能/第一阶段day2/14.py True 2542375166472 2542375166472 Process finished with exit code 0
小数据池
i1=6,i2=6;这两个在表面上看是在内存中开了两个地址,但是(在CMD)命令下结果也是相同
i1=6 i2=6 print(id(i1),id(i2)) D:\anoconda\python.exe F:/python/python学习/人工智能/第一阶段day2/14.py 140721601703840 140721601703840 Process finished with exit code 0
id结果显示,i1和i2在内存中存储的地址完全相同
但是i1=300,i2=300时候,在CMD命令下(pycharm中对结果有干扰)两个的id地址就会出现明显的不同;
一般而言,当一个数字变量的范围在-5-256之间的时候,两个变量会选择共用一个内存地址,以减少对内存空间的占用;这种共用内存的形式被称为小数据池。
除了数字以外,字符串也存在小数据池的现象:
1、当两个字符串中只有字符,不含有特殊符号时候,会出现小数据池现象
s1='alex' s2='alex' print(s1 is s2) print(id(s1),id(s2)) D:\anoconda\python.exe F:/python/python学习/人工智能/第一阶段day2/14.py True 2260626137136 2260626137136 Process finished with exit code 0
2、s1*20和s2*20的时候存在小数据池,但是s1和s2分别乘以21以后就不存在了
除了int,str以外的list、dict、tuple、set等数据类型均不存在小数据池现象