顺之利

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

在python中,is检查两个对象是否是同一个对象,而==检查他们是否相等.

str1 = 'yangshl'
str2 = 'yang' + 'shl'
print('str1 == str2:', str1 == str2)
print('str1 is str2:', str1 is str2)
print("id(str1):", id(str1))
print("id(str2):", id(str2))

 输出结果是:

str1 == str2: True
str1 is str2: True
id(str1): 17102416
id(str2): 17102416

问题:str1 是 一个对象吗??从id上看,的确是一个。

 

one = 'yang'
two = 'shl'
str3 = one+two
print('str1 == str3:', str1 == str3)
print('str1 is str3:', str1 is str3)
print("id(str1):", id(str1))
print("id(str3):", id(str3))

的结果是:

str1 == str3: True
str1 is str3: False
id(str1): 17102416
id(str3): 17102528

 

str3的计算结果明明是 yangshl。但是它和yangshl是不同的对象,但是value是相同的。

str4 = str('yangshl')
str5 = str('yangshl')
print('str4 == str5:', str4 == str5)
print('str4 is str5:', str4 is str5)
print("id(str4):", id(str4))
print("id(str5):", id(str5))

结果是:
str4 == str5: True
str4 is str5: True
id(str4): 17102416
id(str5): 17102416

java中会认为是不同的对象。但是在python中这说明使用 str和字符串直接量是一个对象。

 

如果比对list呢?

list1 = [1]
list2 = [1]
print('list1 == list2:', list1 == list2)
print('list1 is list2:', list1 is list2)
print("id(list1):", id(list1))
print("id(list2):", id(list2))

结果是:
list1 == list2: True
list1 is list2: False
id(list1): 16919944
id(list2): 16920520

 

所以如果你要比较两个值是否相同就用==,如果比较是否是同一个对象就用is。

其实python中的is比较的对象很像C语言中的指针,只有地址相同的指针才是同一个指针。

 

posted on 2016-12-20 17:55  顺之利  阅读(1162)  评论(0编辑  收藏  举报