zoukankan      html  css  js  c++  java
  • Python中is和==的区别的

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

  • 相关阅读:
    非常精辟的几句话
    关于免杀的实践
    分析PE
    分析 Nanocore
    CTO的窘境
    企业级容器云平台
    POJ 2274
    POJ 1703
    POJ 1182
    DNS协议以及报文格式总结
  • 原文地址:https://www.cnblogs.com/yangshl/p/6203604.html
Copyright © 2011-2022 走看看