# python3.7 win pycharm
# is 与==相似 判断,当内容相同,且地址相同时返回true
is1 = [4,5,6]
print(id(is1))
is1 = [5,6,7]
is2 = [5,6,7]
print(id(is1),id(is2))
is3 = is2
is4 = 1
is4 = 1000
is5 = 1000
is7 = (7,8,9)
is8 = (7,8,9)
is9 = "aaa"
is9 = "bbb"
is10 = "bbb"
print(is1 is is2, is2 is is3, is4 is is5, is7 is is8, is9 is is10) #输出false true
结果为:
1758016575944
1758016575816 1758016575944
False True True True True
是否发现与网上一些图给的结论不一样?真相是什么?我们来继续看。
isdemo.py
#python2.7 linux
isa = 1
print id(isa)
isa = 1000
print id(isa)
isb = 1000
print id(isb)
print isa is isb
2.7在执行脚本里和3.7是一样的True
重点来啦,网上的大多数文章会告诉你下面这个结论,我自己跑也会出这个结论:False
为什么之前2个脚本跑都是True,到了这里却是False?
我们会发现前2种(python3.7 和 pyhton2.7脚本执行)情况下,后一个(b)的地址会被分配给前一个改后的地址(a),而在python >>> 这种情况下系统会分配一个额外的地址给后一个(b)。
结论:用脚本跑python,和直接python进去敲python,对于 is 的判断结果是不同的
总结:敲代码的时候别只看网上的结论,理论正确,不等于实际正确。