barryxiao
关于 is 和 == 的标识问题
(1)只要是变量的值相同,标识都相同,没有-5~256的限制,看下面的例子:
a = 100000
b = 100000
if a is b:
print('a 和 b 标识相同,标识为:',id(a))
else:
print('a 和 b 标识不相同,a 标识为:',id(a),'b 标识为:',id(b))
输出结果为:
a 和 b 标识相同,标识为: 2158477874512
(2)同样的如果是负数,仍然没有上述限制:
a = -100000
b = -100000
if a is b:
print('a 和 b 标识相同,标识为:',id(a))
else:
print('a 和 b 标识不相同,a 标识为:',id(a),'b 标识为:',id(b))
输出结果为:
a 和 b 标识相同,标识为: 2137845175632
(3)列表也是一样的,只要是列表项数值一样,那么标识也是一样的。例子如下:
list1 = [10000,20000,30000]
list2 = [10000,12000,15000]
if list1[0] is list2[0]:
print('list1[0] 和 list2[0] 标识相同,标识为:',id(list1[0]))
else:
print('list1[0] 和 list2[0] 标识不相同,list1[0]标识为:',id(list1[0]),'list2[0]标识为:',id(list2[0]))
输出结果为:
list1[0] 和 list2[0] 标识相同,标识为: 1375086286224
(4)元组的标识是跟着变量名的,变量名不一样,标识也不一样,上例子:
tuple1 = (10000,20000,30000)
tuple2 = (10000,12000,15000)
if tuple1[0] is tuple2[0]:
print('tuple1[0] 和 tuple2[0] 标识相同,标识为:',id(tuple1[0]))
else:
print('tuple1[0] 和 tuple2[0] 标识不相同,tuple1[0] 标识为:',id(tuple1[0]),'tuple2[0]标识为:',id(tuple2[0]))
输出结果为:
tuple1[0] 和 tuple2[0] 标识不相同,tuple1[0] 标识为: 1375086286384 tuple2[0]标识为: 1375086286480
(5)字典和列表是一样的,只要是列表项数值一样,那么标识也是一样的。例子如下:
dict1 = {1:10000,2:20000,3:30000}
dict2 = {1:10000,2:12000,3:15000}
if dict1[1] is tuple2[1]:
print('dict1[1] 和 tuple2[1] 标识相同,标识为:',id(dict1[1]))
else:
print('dict1[1] 和 tuple2[1] 标识不相同,dict1[1] 标识为:',id(dict1[1]),'tuple2[1] 标识为:',id(dict2[1]))
输出结果为:
dict1[1] 和 tuple2[1] 标识不相同,dict1[1] 标识为: 1375086286224 tuple2[1] 标识为: 1375086286224