python数据类型分别有整数int / 浮点数float / 布尔值bool / 元组tuple / 列表list / 字典dict,其中数据类型分为两个大类,一种是可变数据类型;一种是不可变数据类型,两者有什么区别呢?

一.关于内存

在讲解python可变数据类型和不可变数据类型之前需要先普及一下内存相关的简单知识!

在python编程的时候,代码中的变量实际上都是存储在计算机内存中,当然这里指的内存在计算机中是虚拟的,你看不见摸不着!每一个内存都有一个对应的内存地址,讲到这里需要再次介绍一个python内置函数id(),该函数可以用于获取内存地址!获取内存地址方法如下:

  1. if __name__ == "__main__":
  2.  
  3. a = 10
  4. b = 20
  5. print("a的数据类型是:{} 地址:{}".format(type(a),id(a)))
  6. print("b的数据类型是:{} 地址:{}".format(type(b), id(b)))

输出结果:

  1. a的数据类型是:<class 'int'> 地址:1994744256
  2. b的数据类型是:<class 'int'> 地址:1994744576

分析下上面代码:定义了局部变量a和b,python会自动给局部变量分配内存,分别用来存放整数10和20,并通过内置函数id()获取内存地址!关于内存这里不做过多介绍,你需要记住的是:每一个内存都有一个一个对应的内存地址,分配的内存在程序结束时由系统自动回收!

二.可变数据类型和不可变数据类型

python数据类型分别有整数int / 浮点数float / 布尔值bool / 元组tuple / 列表list / 字典dict,这是python开发中最常用的数据类型!

1.可变数据类型和不可变数据类型区别

可变数据类型:当该数据类型对应的变量的值发生了变化时,如果它对应的内存地址不发生改变,那么这个数据类型就是 可变数据类型。

不可变数据类型:当该数据类型对应的变量的值发生了变化时,如果它对应的内存地址发生了改变,那么这个数据类型就是 不可变数据类型。

总结:可变数据类型更改值后,内存地址不发生改变;不可变数据类型更改值后,内存地址发生改变。

2.不可变数据类型

不可变数据类型:数值类型(int、float、bool)、string(字符串)、tuple(元组)

  1. # !usr/bin/env python
  2. # -*- coding:utf-8 _*-
  3. """
  4. @Author:何以解忧
  5. @Blog(个人博客地址): shuopython.com
  6. @WeChat Official Account(微信公众号):猿说python
  7. @Github:www.github.com
  8.  
  9. @File:python_variable.py
  10. @Time:2019/10/24 21:25
  11.  
  12. @Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  13. """
  14.  
  15. #整形变量
  16. a = 10
  17. print("整形变量a修改之前地址:{}".format(id(a)))
  18. a = 20
  19. print("整形变量a修改之后地址:{}".format(id(a)))
  20. print("***"*20)
  21.  
  22. #浮点数变量
  23. a = 10.5
  24. print("浮点数变量a修改之前地址:{}".format(id(a)))
  25. a = 20.2
  26. print("浮点数变量a修改之后地址:{}".format(id(a)))
  27. print("***"*20)
  28.  
  29. #字符串变量
  30. a = "hello"
  31. print("字符串变量a修改之前地址:{}".format(id(a)))
  32. a = "world"
  33. print("字符串变量a修改之后地址:{}".format(id(a)))
  34. print("***"*20)
  35.  
  36. #布尔值变量
  37. a = False
  38. print("布尔值a修改之前地址:{}".format(id(a)))
  39. a = True
  40. print("布尔值a修改之后地址:{}".format(id(a)))
  41. print("***"*20)
  42.  
  43. #元组的数据不能修改,否则会报错

输出结果:

  1. 整形变量a修改之前地址:1994744256
  2. 整形变量a修改之后地址:1994744576
  3. ************************************************************
  4. 浮点数变量a修改之前地址:2713286559088
  5. 浮点数变量a修改之后地址:2713286559136
  6. ************************************************************
  7. 字符串变量a修改之前地址:2713269294224
  8. 字符串变量a修改之后地址:2713269272112
  9. ************************************************************
  10. 布尔值a修改之前地址:1994252480
  11. 布尔值a修改之后地址:1994252448
  12. ************************************************************

3.可变数据类型

可变数据类型:list(列表)、dict(字典)

  1. #列表
  2. a = list()
  3. print("列表a修改之前地址:{}".format(id(a)))
  4. a.append(20)
  5. print("列表a修改之后地址:{}".format(id(a)))
  6. a.append(False)
  7. print("列表a修改之后地址:{}".format(id(a)))
  8. a.append("hello")
  9. print("列表a修改之后地址:{}".format(id(a)))
  10. print("***"*20)
  11.  
  12. #字典
  13. a = dict()
  14. print("字典a修改之前地址:{}".format(id(a)))
  15. a["name"]="zhangsan"
  16. print("字典a修改之后地址:{}".format(id(a)))
  17. a["age"]=18
  18. print("字典a修改之后地址:{}".format(id(a)))
  19. a["sing_dog"]=True
  20. print("字典a修改之后地址:{}".format(id(a)))
  21. print("***"*20)

输出结果:

  1. 列表a修改之前地址:2067294579016
  2. 列表a修改之后地址:2067294579016
  3. 列表a修改之后地址:2067294579016
  4. 列表a修改之后地址:2067294579016
  5. ************************************************************
  6. 字典a修改之前地址:2067294527992
  7. 字典a修改之后地址:2067294527992
  8. 字典a修改之后地址:2067294527992
  9. 字典a修改之后地址:2067294527992
  10. ************************************************************

三.重点总结

1.不可变数据类型:数值类型(int、float、bool)、string(字符串)、tuple(元组)

2.可变数据类型:list(列表)、dict(字典)

3.可变数据类型更改值后,内存地址不发生改变;不可变数据类型更改值后,内存地址发生改变

猜你喜欢:

1.python字典dict

2.python列表list

3.python字典推导式

4.python列表推导式

5.python字符串/列表/元组/字典之间的相互转换

转载请注明:猿说Python » python可变数据类型和不可变数据类型

技术交流、商务合作请直接联系博主
扫码或搜索:猿说python
猿说python
微信公众号 扫一扫关注

python 可变数据类型和不可变数据类型(7)的更多相关文章

  1. python基础之可变数据类型与不可变数据类型

    一.什么可变数据类型和不可变数据类型 可变数据类型:value值改变,id值不变:不可变数据类型:value值改变,id值也随之改变. 二.如何确定一种数据类型是可变的还是不可变的 根据可变数据类型与 ...

  2. python的可变数据类型和不可变类型

    python里面一切皆对象 ython的每个对象都分为可变类型和不可变类型 整形,浮点型,字符串,元组属于不可变类型,列表,字典是可变类型 不可变数据类型 对不可变类型的变量重新赋值,实际上是重新创建 ...

  3. 一道问题引出的python中可变数据类型与不可变数据类型

    一. 问题的提出 我们先来看两个对比 第一道题,当对象为整数时,最终结果:b = 2, a = 1,b的变化没有引起a的变化 a = 1 b = a b += 1 print(a) print(b) ...

  4. python 可变数据类型 和 不可变数据类型

    在 python 中,类型属于对象,变量是没有类型的: a=[1,2,3] a="Runoob"以上代码中,[1,2,3] 是 List 类型,"Runoob" ...

  5. Python 可变数据类型与不可变数据类型

    浅拷贝和深拷贝 Python数据都是存放到内存中的,Python的数据又分为可变和不可以变 可变数据(修改了值后,不会改变内存地址,修改的值还是指向相同的内存地址) 字典 # 列表是可变 x = [1 ...

  6. python27期day03:字符串详解:整型、可变数据类型和不可变数据类型、进制转换、索引、切片、步长、字符串方法、进制转换、作业题。

    1.%s: a = "我是新力,我喜欢:%s,我钟爱:%s"b = a%("开车","唱跳rap")print(b)2.整型: 整数在Pyt ...

  7. python3 可变数据类型和不可变数据类型

    python内置有6种对象类型: Number 数值型 int 整型 不可变 float 浮点型 不可变 complex 复数 不可变 String 字符串   不可变 Tuple 元组   不可变 ...

  8. day05数据类型,数字类型,字符串类型,字符串的操作方法,列表类型的操作方法,可变类型与不可变类型

    复习 ''' 流程控制 1.顺序结构.分支结构.循环结构 2.if分支结构 if 条件: 代码块 elif 条件: 代码块 else: 代码块 # 可以被if转换为False:0 | '' | Non ...

  9. python基础知识3——基本的数据类型2——列表,元组,字典,集合

    磨人的小妖精们啊!终于可以归置下自己的大脑啦,在这里我要把--整型,长整型,浮点型,字符串,列表,元组,字典,集合,这几个知识点特别多的东西,统一的捯饬捯饬,不然一直脑袋里面乱乱的. 一.列表 1.列 ...

随机推荐

  1. 题解 UVa11752

    题目大意 输出所有小于 \(2^{64}-1\) 的正整数 \(n\), 使得 \(\exists p, q, a, b\in \mathbb{N+}, p\neq q\rightarrow a^p= ...

  2. Python3中用pip离线安装

    本文原创,转载请注明出处. Python3 中 离线安装 ① 生成已安装模块列表,默认存在C:\Users\Administrator下 pip freeze > requirements.tx ...

  3. webpack的loader的原理和实现

    想要实现一个loader,需要首先了解loader的基本原理和用法. 1. 使用 loader是处理模块的解析器. module: { rules: [ { test: /\.css$/, use: ...

  4. WinDbg常用命令系列---错误消息显示!error

    !error 这个!error扩展命令解码并显示有关错误值的信息. !error Value [Flags] 参数: Value指定以下错误代码之一:Win32.Winsock.NTSTATUS.Ne ...

  5. .bat批处理命令之设置关机倒计时脚本

    @ECHO off REM 不显示后续命令行及当前命令行 TITLE Shutdown countdown REM 设置脚本标题 COLOR 0A REM 设置脚本 背景色为黑色 前景色为淡绿色 :s ...

  6. python 之实现断点下载与下载进度条

    一.效果图 二.进度条代码 __author__ = 'Yang' import os import time from threading import Thread '''下载进度条''' cla ...

  7. 还在用难用的AssetBundle?快来运用Unity新的可寻址资源系统,助力游戏开发

    Unity Addressables可寻址资源系统是一个强大的Unity资源包,它能够帮助解决游戏开发中最重要的一些挑战:高效率和轻松的内容管理. 在管理游戏资源时,往往很难维持好的标准,从而避免让项 ...

  8. Java实现Txt转PDF文件

    TxT转PDF可以直接使用IText就可以了,IText在pdf领域可以说暂时是最好的方案了.通过直接读取txt文件,然后生成pdf,再添加文本就可以了. 代码如下: public class Txt ...

  9. service和Dao层有什么关系

    Dao层:主要是做数据持久层的工作,负责与数据库进行联络的一些任务都封装在此,DAO层的设计首先是设计DAO的接口,然后就可在模块中调用此接口来进行数据业务的处理,而不用关心此接口的具体实现类是哪个类 ...

  10. Dictionary导致IIS CPU 100%案例分析 学会使用WinDbg工具

    .NET  开发注意 线程安全性问题.弄不好可能会导致CPU满载 特别主要 Dictionary作为静态变量使用的情况. 解决方法: Dictionary 换成  ConcurrentDictiona ...