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等数据类型均不存在小数据池现象

 

posted @ 2019-01-02 22:42  舒畅123  阅读(118)  评论(0编辑  收藏  举报