zoukankan      html  css  js  c++  java
  • 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)

  • 相关阅读:
    VS中生成时“sgen.exe”已退出,代码为 1解决办法
    配置 influxDB 鉴权及 HTTP API 写数据的方法
    InfluxDB 的UTC时间问题与简单的持续查询语句
    C# 中HttpClient的使用中同步异步问题
    Action<T> Delegate
    Task Class
    .net4.0、.net4.5、.net4.6 三者对系统的要求
    vue 组件动态 循环
    js 取得当天0点 / 23:59:59 时间
    vue中element-ui树形控件自定义节点,注意一下
  • 原文地址:https://www.cnblogs.com/liangshian/p/11005117.html
Copyright © 2011-2022 走看看