• Python初学笔记之可变类型、不可变类型


    python中

    可变类型:

    • 列表 list
    • 字典 dict

    不可变类型:

    • 数字型:int、float、complex、bool、long
    • 字符型 str
    • 元组 tuple

    id(i):通过id查看变量的内存地址

    引用

      在Python中,变量也称为:对象的引用。变量存储的就是对象的地址

      变量位于:栈内存

      对象位于:堆内存

    Python是动态类型语言

      变量不需要显式声明类型。根据变量引用的对象,Python解释器自动确定数据类型

    Python是强类型语言

      每个对象都有数据类型,只支持该类型支持的操作。

    下面通过代码来比较一下区别。定义变量之后打印出对应的内存地址。

    i = 2
    print(id(i))    # id:140713329648304
    
    j = 2
    k = 2
    print(id(j))    # id:140713329648304
    print(id(k))    # id:140713329648304
    
    i = 3
    print(id(i))    # id:140713329648336

    我们发现,当创建 i=2,j=2,k=2时,他们的内存地址都是相同的。

    它们内存的分配其实是如图的:

    当我给i赋新的值3的时候,其实是给了i一个新的内存地址,这个地址的值对应堆内存中一个新的对象,

    可见,即时现在i的值变等于3,原来的对象还是存在的,i的改变的并不是因为对象的值改变了,而是i引用了一个新的对象,因此我们说int是不可变类型。

    a = [1, 2, 3]   
    print(id(a))    # id:2479232279176
    
    b = [1, 2, 3]   
    print(id(b))    # id:2479232279240
    
    a.append(88)    
    print(id(a))    # id:2479232279176

     可变类型:在使用append方法后,变量的地址没有改变,它修改的是堆内存中对应id地址上的值。

     当然,再新建一个对象赋值的时候,即使值是一样的,它一样会改变变量的地址指向。

  • 相关阅读:
    DSP28335 烧写到RAM和FLASH方法
    脉冲提取
    基于飞秒光频梳的正弦相位调制干涉绝对距离测量方法研究 -张世华
    DSP28335 IO口寄存器
    DSP28335 使用技巧
    freertos、UCos这种实时操作系统和Linux、Windows这种系统的 本质区别
    stm32的定时器输入捕获 与输出比较
    五大常用算法--回溯
    Dijkstra算法
    字典树-Trie
  • 原文地址:https://www.cnblogs.com/jszfy/p/11117744.html
Copyright © 2020-2023  润新知