在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语言中的指针,只有地址相同的指针才是同一个指针。