让我搞得脑壳痛的is和==

#对比两个参数值相等的情况
x = 5
y = 5
print(id(x), id(y))# =>140708669731792 140708669731792
#上一回讲过,两个参数值相等时,两个参数地址相等
print(x == y)# =>True
#答案自然也是True,但是这个==号
#到底是两个参数值相等的时候相等,还是两个参数地址相同的时候相等,要进一步展开

#现在对比两个列表内容相等的情况
x = [1, 2, 3]
y = [1, 2, 3]
print(id(x), id(y))# =>2915078741448 2915079010824
#两个列表,内容相同,可地址不同
print(x == y)# =>True
#答案是True,但依旧不意味着==比较的是内容
#因为我在胡乱弄的时候,突然又发现一个问题
print(id(x[0]), id(y[0]))# =>140708669731664 140708669731664
#两个列表中的内容地址相等。。。
#这里地址又相等了。。。这里把我搞晕了,但仔细想想,也可以这么理解
#把x[0]和y[0]看成两个参数,参数值相等,所以内容相等
#把列表x和y看出两个参数,x参数的内容为x[0],x[1],x[2]这些参数名,同理于y
#所以x和y的参数内容不同,地址不同
#故参数内容相同的话,参数地址相同
#那么上面x==y,而x和y地址不同,所以比较的是x和y的内容的内容或者内容的地址
#反正都是内容啦,那么愉快的证明,==比较的是对象的内容

print(x is y)# =>False
print(x[0] is y[0])# =>True
#x和y地址不同,而x[0]和y[0]地址相同,上面证明过了
#所以可以证明,is比较的是对象地址是否相同

以上全为个人观点,希望有人能指出不足,谢谢

猜你喜欢

转载自blog.csdn.net/qq_43316108/article/details/86546812