1.Python中的标识、地址以及 “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
a=[1,2,3]
b=a
print(b is a)
print(b==a)

b=a[:]
print(b is a)
print(b==a)

#前者在传递引用,后者在拷贝
b
=a[0] print(b is a[0]) print(b==a[0]) 输出结果为: True True False True True True
 

猜你喜欢

转载自www.cnblogs.com/jaredisbest/p/10662831.html
今日推荐