一直接上手撸代码
我们先看一段(字符串情况):
a=“hello world”
b=“hello world”
打印出结果:
print(id(a)) #5619056
print(id(b)) #5619056
print(a is b) #True
print(a==b) #True
(列表的情况)
c=[1,2,3]
d=[1,2,3]
print(id(c)) #19029896
print(id(d)) #19068360
print(c is d) #False
print(c==d) #True
由此看来“is”,通常来说"a is b",如果是True的情况下,a和b的内存地址相同,而"==",是在值相同的情况下而返回True
来点干货:
那我们可能想到是的字符串是不可变的,而列表是可变的,所以相同的字符串的内存地址是一样的,那么我们看下一段代码:
c=(1,2,3)
d=(1,2,3)
print(id(c)) #6738496
print(id(d)) #6787648
print(c is d) #False
print(c==d) #True
而元祖是不可变的,所以我们不能以变量的类型,来判断‘’值相等‘’的内存地址
二:我们来看一些特殊情况
a=6
b=6
print(a is b) #True
a=66666666666666666666666666666
b=66666666666666666666666666666
print(a is b)#True
这种情况想必太正常不过了,看下一个:嘿嘿
a=-5
b=-5
print(a is b)#True
a=-6
b=-6
print(a is b)#False
a=-55555555555555555555555555
b=-55555555555555555555555555
print(a is b)#False
我一开始知道这个情况,我也很惊讶,原来,python中数字,小于等于-6以后值相同的负数,内存地址就不一样了,那么,-6就不是-6了,真的是666啊