python is not_python:is、is not

1、is 、is  not

判断两个对象是否是同一个对象,即两个对象在内存中的地址是否相同:

1)是,返回True;

2)不是,返回False

注意:【1】小整数对象池

若是整数且在小整数池内,多个变量绑定同一数值时,实际上是这几个变量绑定(引用)同一个对象。

小整数对象池[-5,256],左闭右闭区间。

为避免频繁的创建和销毁内存空间,提高效率、优化运算速度,python内建小整数对象池,这个范围内的整数在python初始化的时候就创建了,在内存中存在。

del语句删除的时候,不会被销毁、释放,可以一直重复使用。

这些整数一直存在,所以这个范围内的相同整数是同一个对象,它们的id相同,可用id()函数验证

整数和字符串是不可变对象,也就意味着可以用来共享,如100个“python”字串变量可以共享一个“python”字符串对象,而不是创建100个“python”字符串

In [20]: a = 100In [21]: b = 100In [22]: c = 500In [23]: d = 500In [24]: a isb

Out[24]: True

In [25]: c isd

Out[25]: False

当变量绑定的数值在小整数池中时,不会创建新的对象,而是直接引用小整数对象池中的数据。

【2】大整数对象池

当数值不在小整数对象池内时,会自动创建新的对象。但是,处于同一个代码块的相同数值,是同一个对象。

一个代码块就是一个【.py】文件。

2 a = 100

3 b = 100

4 c = 500

5 d = 500

6 print(a is b) #True

7 print(c is d) #True

8 print(a is c) #False

【3】字符串的判断

判断两个字符串是否是同一个对象时,要注意字符串的intern机制。

intern机制

即值同样的字符串对象仅仅会保存一份,放在一个字符串池中,是共用的,当然,肯定不能改变,这也决定了字符串必须是不可变对象

【Linux环境+终端下运行+python3.5.2】

字符串本身没有字符限制(个人亲测,待后续专业验证。看到网上说字符串intern机制有20个字符限制触发条件)

字符串本身字符(含有特殊字符和不含特殊字符)超过20,结果仍为True。

字符串拼接,字符串不含特殊字符,字符串超过20,结果则为False。

字符串含特殊字符拼接,拼接后字符长度超过20、不超过20,均为False

【在pycharm 2019.3.1 + python 3.7.6】

字符串本身长度(不含特殊字符)超过20、不超过20,结果均为True。

字符串本身长度(含特殊字符)超过20、不超过20,结果均为True

含有特殊字符时拼接,拼接后字符长度超过20、不超过20,结果均为True

字符串不含特殊字符,拼接后字符长度超过20、不超过20,结果均为True

#linux + 终端 + python 3.5.2#a = 100#b = 100#c = 500#d = 500#print(a is b) #True#print(c is d) #True

#s1= "qasf"#s2 = "qasf"#print(s1 is s2) #True

#不含特殊字符,拼接后字符超过20为False。不超过20,为True#s1= "qasf" *5#s2= "qasf" * 5#print(len(s1))#print(s1 is s2) #True

s1= "qasf" *5 +"a"s2= "qasf" *5 + "a"

print(len(s1))print(s1 is s2) #

#含特殊字符时,拼接,拼接后字符长度超过20、不超过20,结果均为False#s1 = "@asf" *4#s2 = "@asf" *4#print(len(s1))#print(s1 is s2) #True

#含特殊字符,字符串本身长度超过20、不超过20,结果均为True#s1= "wq@asfa@asfaqwertasdf"#s2= "wq@asfa@asfaqwertasdf"#print(len(s1))#print(s1 is s2)

## 不含特殊字符,字符串本身长度超过20、不超过20,结果均为True#s1 = "qaaaaasssssdddddfffff"#s2 = "qaaaaasssssdddddfffff"#print(len(s1))#print(s1 is s2)

print(s1)print(s2)print(s1 is s2)

【在pycharm 2019.3.1 + python 3.7.6】

#pycharm 中 +python 3.7.6#a = 100#b = 100#c = 500#d = 500#print(a is b) #True#print(c is d) #True

#s1 = "qasf" * 4#s2 = "qasf" *4#print(s1 is s2) #True

#s1= "qasf"#s2 = "qasf"#print(s1 is s2) #True

#不含特殊字符,拼接后字符超过20、不超过20,结果均为True#s1= "qasf" *6#s2= "qasf" * 6#print(len(s1))#print(s1 is s2) #True

#s1 = "qasf" *5 +"a"#s2 = "qasf" *5 + "a"#print(len(s1))#print(s1 is s2) #

#含特殊字符时,拼接,拼接后字符长度超过20、不超过20,结果均为True#s1 = "@asf" *6#s2 = "@asf" *6#print(len(s1))#print(s1 is s2) #True

#含特殊字符,字符串本身长度超过20、不超过20,结果均为True#s1= "@asfa@asfaqwertasdf"#s2= "@asfa@asfaqwertasdf"#print(len(s1))#print(s1 is s2)

#不含特殊字符,字符串本身长度超过20、不超过20,结果均为True#s1 = "aaaasssssdddddfffff"#s2 = "aaaasssssdddddfffff"#print(len(s1))#print(s1 is s2)

print(s1)print(s2)print(s1 is s2)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值