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)

  • 相关阅读:
    常见的设计模式:单例模式、工厂模式、观察者模式、装饰模式与适配器模式
    WCF、Web API、WCF REST、Web Service之区别
    Asp.Net Web API VS Asp.Net MVC
    sql server 2008 评估期已过期解决办法
    IIS6.0中布署MVC站点
    SQL Server类型与C#类型对应关系
    经纬度 lbs 笔记
    C#实现用Newtonsoft.Json 4.5.11解析人人网院校信息并获取院系信息
    当前上下文中不存在名称"Session"
    [ASP.NET]HttpCookieCollection to CookieCollection的最简单方法
  • 原文地址:https://www.cnblogs.com/liangshian/p/11005117.html
Copyright © 2011-2022 走看看