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地址上的值。

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

  • 相关阅读:
    部署NetCore项目(本文介绍用用IIS部署)
    vs中添加MySql实体集流程
    一文搞定HashMap的实现原理
    二分查找
    hashcode返回值可能为负数
    哈希碰撞与生日攻击
    并发的第二天
    java并发编程-1
    排序的第一天
    并发的第一天
  • 原文地址:https://www.cnblogs.com/jszfy/p/11117744.html
Copyright © 2011-2022 走看看