• python的in,is和id函数


    1. in 和 not in —— 判断某个序列中是否存在某值

    # in
    aa = [1,2,3,'Cathy','太平洋']
    if '大西洋' in aa:
        print('yes')
    else:
        print('no')  # no
    
    # not in
    if '大西洋' not in aa:
        print('yes')  # yes
    else:
        print('no')
        
    #-------------------------------------------------------
    # 判断字符串是否存在某子串    
    if '马来西亚' in '马来西亚是一个太平洋国家':   
        print('of course') # 输出 'of course'
    
    # ------------------------------------------------------
    if 0 in (0,1,2,3):
        print('hhhh') #输出 'hhhh'
    
    if 0 in [0,1,2,3]:
        print('kkkk') #输出 'hhhh'

    2. is 和 is not —— 判断两个标识符是不是指向同一个地址(同一个对象),类似于判断 id(x) == id(y) —— 具体对于相同值的内存管理,请见:https://www.cnblogs.com/qi-yuan-008/p/12173736.html

    # 相同
    bb = 234
    cc = 234
    if bb is cc:
        print('bb is cc')  #结果是 bb is cc 
    else:
        print('bb is not cc')
    print(id(bb))  # id()值一样,因为python的优化机制,相同的'数值'数据会使用同样的内存空间。
    print(id(cc))
    
    # 相同
    bb = 'hhh'
    cc = 'hhh'
    if bb is cc:
        print('bb is cc')  #同样也是因为python的自身机制,在某些'字符'位数下,相同字符串也会指向同一地址 ------ 有说20位的,与系统有关
    else:
        print('bb is not cc')# 相同,python的对象引用机制
    bb = [1,2,3]  
    cc = bb
    if bb is cc:
        print('bb is cc')  #结果是 bb is cc 
    else:
        print('bb is not cc')
    
    # 不相同
    bb = [1,2,3]
    cc = [1,2,3]
    if bb is cc:
        print('bb is cc')   
    else:
        print('bb is not cc') #结果是 bb is not cc
    print(id(bb))  # id()值不一样
    print(id(cc))

    3. id() 函数,获取对象的内存地址(不同电脑不一样),例如:

    bb = 'hhh'
    cc = bb
    if bb is cc:
        print('bb is cc')  #结果是 bb is cc 
    else:
        print('bb is not cc')
    print(id(bb))  # id()值一样,均为 1680346901336
    print(id(cc))

     4. 可变数据类型和不可变数据类型 

    不可变数据类型: 当该类型的变量值发生了改变,它对应的内存地址也会发生改变。

    可变数据类型    :当该类型的变量值发生了改变,它对应的内存地址不发生改变。

    这里的可变不可变,是指内存中的值内容(value)是否可以被改变。如果是不可变类型,在操作对象本身的时候,必须在内存新申请一块内存(因为原内存内容是不可变的)。如果是可变类型,操作对象的时候,不需要再在其他地方申请内存,只需要在此对象后面连续申请内存,所以它的地址会保持不变,但该内存区域大小会变化。

    在python中:

    int,string,float,tuple —— 属于python的不可变类型

    object、list、set —— 属于python的可变类型

    使用:可以使用内建函数id()来确认对象的地址在两次赋值前后是否发生了变化

    例如:分别对于数值和列表类型:

    a = 1
    print(id(a))
    a = a+1  #a本身发生变化
    print(id(a))
    # 结果分别为:140732932812544 和 140732932812576,表示id值发生了变化
    
    a = ['1']
    print(id(a))
    a.append('sss') #a本身发生变化
    print(id(a))
    print(a)   # 输出:['1', 'sss']
    # 结果分别为:1680347029768 和 1680347029768,表示id值没有变化

    参考:

    https://www.runoob.com/python/python-func-id.html

    https://blog.csdn.net/zhangvalue/article/details/94598781

    https://www.cnblogs.com/Jacck/p/7790049.html

    https://blog.csdn.net/cadi2011/article/details/88528204

  • 相关阅读:
    Luogu P1396 营救
    Luogu P1339 热浪Heat Wave
    哈夫曼树学习笔记
    题解 CF1372C
    题解 CF 1372 B
    题解 CF 1372A
    题解 UVA1193 Radar Installation
    题解 洛谷 P2287 [USACO07NOV]Sunscreen G
    洛谷 P1080 国王游戏 题解
    牛客练习赛 66C公因子 题解
  • 原文地址:https://www.cnblogs.com/qi-yuan-008/p/12173287.html
Copyright © 2020-2023  润新知