zoukankan      html  css  js  c++  java
  • 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地址上的值。

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

  • 相关阅读:
    Linux编辑器- vi / vim
    Java使用POI对Excel进行基本操作(4)-Excel中绘制图片
    Java使用POI对Excel进行基本操作(3)-合并单元格
    Java使用POI对Excel进行基本操作(2)-基本操作和样式设置
    Java使用POI对Excel进行基本操作(1)-概述和maven依赖
    Linux之docker搭建
    docker的个人理解
    python接口自动化-requests-toolbelt处理multipart/form-data
    python3.6安装lxml库
    pytest之assert断言
  • 原文地址:https://www.cnblogs.com/jszfy/p/11117744.html
Copyright © 2011-2022 走看看