zoukankan      html  css  js  c++  java
  • 6. 可变不可变类型

    一:可变不可变类型

    可变类型:

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

    不可变类型:

    • 值改变,id也改变了,证明是产生新的值,压根没有改变原值,证明原值是不可改变的

    二:验证

    1. int是不可变类型

    x = 10
    print(id(x))
    x = 20       # 产生新值
    print(id(x))
    
    1646651456
    1646651616
    

    2. float是不可变类型

    x = 10.1
    print(id(x))
    x = 20.1
    print(id(x))
    
    21905056
    21902576
    

    3. str是不可变类型

    x = 'xxq'
    print(id(x))
    x = 'zsy'
    print(id(x))
    
    59860800
    59862464
    

    小结:

    • int、float、str在Python中都被设计成了不可分割的整体,不能够被改变

    4. list是可变类型

    • 列表本身的内存地址是不变的,但是列表里面的存的值的内存地址变了

    • 改变的是元素地址(换汤不换药)

    • 值改变,id(内存地址)不变

    l = ['aaa','bbb','ccc']
    print(id(l))
    l = ['xxx','yyy','zzz']
    print(id(l))
    
    l = ['aaa','bbb','ccc']
    print(id(l))
    l[0] = 'AAA'
    print(id(l))
    

    5. dict是可变类型

    • 值改变,id(内存地址)不变
    dic = {'k1':111,"k2":222}
    print(id(dic))
    dic['k1'] = 333
    print(id(dic))
    

    字典补充:

    定义:
    • {}内用逗号隔开多个 key : value
    • 其中 value可以是任意类型,但是 key必须是不可变类型
    dic={
    'k1':111,
    'k2':3.1,
    'k3':[333,],
    'k4':{'name':'egon'}
    }
    
    dic={
    2222:111,
    3.3:3.1,
    'k3':[333,],
    'k4':{'name':'egon'}
    }
    print(dic[3.3])
    
    dic={[1,2,3]:33333333}     # 报错,key必须是不可变类型
    dic={{'a.txt':1}:33333333}     # 报错,key必须是不可变类型
    
    

    6. bool不可变

    True就是True

    False就是False

  • 相关阅读:
    Zookeeper
    激活函数
    线程池
    用rand()和srand()产生伪随机数的方法总结 (转贴)
    连接SDE数据库代码
    ProgressBar
    ArcEngine+OpenGL之二系统平台搭建
    我所知道的ArcObjects开发(转)
    oracle wm_concat函数 乱码
    修改32位的AutoCAD2012,使其能在64位系统上安装
  • 原文地址:https://www.cnblogs.com/j-chao/p/12955370.html
Copyright © 2011-2022 走看看