• python面试题(-)可变数据类型与不可变数据类型


    python3中有六个标准的数据类型:number(数字型)、string(字符串型)、list(列表)、type(元祖)、dictionary(字典)、set(集合),其中不可变类型三个:number、type、stri;剩下的三个是可变数据类型。

    0x01:不可变数据类型

    对于判断是否为可变数据类型,我们可以用id函数,它的作用是获取对象的内存地址。假如我们写了下面两行代码:

    >>> a=5 
    >>> id(5)
    1351465552

     第一行声明了一个number类型的变量,并给他赋值为5,第二行获取到了a这个对象的内存地址。

    下面我们改变一下a的值,在id一下试试:

    >>> a=5
    >>> id(5)
    1351465552
    >>> a=6
    >>> id(a)
    1351465584
    

     可以看到当a的值被改变时,a这个number类对象的内存地址也发生了变化。也就是说,一个内存地址只能对应一个值,内存地址与值的对应关系是不能变的,这种叫不可变数据类型。同样,字符串也是。

    >>> s='qwer'
    >>> id(s)
    2374200496792
    >>> s='qwr'
    >>> id(s)
    2374200498976
    

     元祖里面的值不能被修改,所以也为不可变数据类型,但如果元祖里含有列表的话,列表里面的值可以被修改:

    >>> t=(1,2,3,[4,5,6])
    >>> t[3]
    [4, 5, 6]
    >>> t[3][1]
    5
    >>> t[3][1]=6
    >>> t[3]
    [4, 6, 6]
    

     0x02:可变数据类型

    可变数据类型就是当对象的值改变是,对象的内存地址不会改变。用list试一下

    >>> a=[4,5,6]
    >>> id(a)
    2374200503880
    >>> a[1]
    5
    >>> a[1]=6
    >>> a[1]
    6
    >>> id(a)
    2374200503880
    

    但是你如果像下面这样写的话,那地址就会改变了。

    >>> a=[1,2,3]
    >>> id(a)
    2374200502984
    >>> a=[4,5,6]
    >>> id(a)
    2374200503880
    

     因为这样写的话,就不是改变a的值了,此时的a已经不再是上面哪一个了,它是一个新的list对象

    (ps:本人太菜,若有错误的地方欢迎大佬随时责骂。。。。xixixii)

  • 相关阅读:
    注解
    LeedCode刷题:337.打家劫舍Ⅲ
    计蒜客:踏青(DFS)
    C++中memset()用法
    DFS深度优先搜索(附例题)
    计蒜客:网络交友:map+set+并查集
    JavaString类中valueOf和parseInt的区别
    Leedcode刷题 539. 最小时间差
    ps换衣服颜色
    hashmap的一些总结
  • 原文地址:https://www.cnblogs.com/liangshian/p/11005117.html
Copyright © 2020-2023  润新知