• Python的可变和不可变类型


    一、可变类型(不可哈希类型就是可变类型-->unhashable)

      值改变,id不变,证明改的是原值,证明原值是可以改变的。

       总结:list[],dict{},都为可变类型,整体的地址不变,变的是里面的值,针对字典多说点:key必须是不可变类型,value可以是任意类型。

    # list是可变类型
    l=['aaa','bbb','ccc']
    print(id(l))  # -->31194624
    l[0]= 2
    print(l)  # [2, 'bbb', 'ccc']
    print(id(l))  # -->31194624
    l[1] = True
    print(l)  # [2, True, 'ccc']
    print(id(l))  # -->31194624
    l[2] = [4,5,6,]
    print(l)  # [2, True, [4, 5, 6]]
    print(id(l))  # -->31194624
    dict 可变类型
    dic={'k1':111,'k2':222}
    print(id(dic))  # --> 31210112
    dic['k1']=3333333333
    print(dic)  # {'k1': 3333333333, 'k2': 222}
    print(id(dic))  # --> 31210112
    # 关于字典补充:
    # 定义:{}内用逗号分隔开多key:value,
    #           其中value可以是任意类型
    #           但是key必须是不可变类型
    dic={
        'k1':111,
        'k2':3.1,
        'k3':[333,],
        'k4':{'name':'egon'}
    }
    print(id(dic))
    #
    dic={
        2222:111,
        3.3:3.1,
        'k3':[333,],
        'k4':{'name':'egon'}
    }
    print(id(dic))
    # print(dic[3.3])
    
    # dic={[1,2,3]:33333333}  # --> TypeError: unhashable type: 'list'
    # dic={{'a':1}:33333333}  # --> TypeError: unhashable type: 'dict'
    # 总结:不可哈希类型就是可变类型

    二、不可变类型

      值改变,id也改变,证明是产生新的值,压根没有改变原值,证明原值是不可以被修改的。

    # int是不可变类型
    x=10
    print(id(x))       -->8791237908416
    x=11 # 产生新值
    print(id(x))       -->8791237908448
    float是不可变类型
    x=3.1
    print(id(x))  # -->30373680
    x=3.2
    print(id(x))  # -->34764944
    str是不可变类型
    x="abc"
    print(id(x))  #  -->31187056
    x='gggg'
    print(id(x))  #  -->4718128
    bool不可变
    a = True
    print(id(a))  # -->8791233238864
    b = True
    print(id(b))  # -->8791233238864
    c = False
    print(id(c))  # -->8791233238896
    d = False
    print(id(d))  # -->8791233238896
    print(id(True))  # -->8791233238864
    print(id(False)) # -->8791233238896

      总结:int类型,float类型,str类型,bool类型都是不可变类型,都被设计成了不可分割的整体,不能够被改变。

      为什么说不可分割?例如:10 为不可分割,为什么10 + 1 =11,11是一个新的不可分割的值。

  • 相关阅读:
    低代码能做什么?这家服务商用钉钉宜搭打造了智慧医院管理应用
    【深度】阿里巴巴万级规模 K8s 集群全局高可用体系之美
    如何做规划?分享2种思维和4个方法
    配置审计(Config)配合开启OSS防盗链功能
    被解救的代码
    物联网海量时序数据存储有哪些挑战?
    Serverless:这真的是未来吗?(一)
    数据库学习之MySQL进阶
    网页三剑客之CSS
    网页三剑客之HTML
  • 原文地址:https://www.cnblogs.com/liunaixu/p/12431595.html
Copyright © 2020-2023  润新知