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

一.关于内存

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

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

if __name__ == "__main__":

    a = 10
b = 20
print("a的数据类型是:{} 地址:{}".format(type(a),id(a)))
print("b的数据类型是:{} 地址:{}".format(type(b), id(b)))

输出结果:

a的数据类型是:<class 'int'> 地址:1994744256
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(元组)

# !usr/bin/env python
# -*- coding:utf-8 _*-
"""
@Author:何以解忧
@Blog(个人博客地址): shuopython.com
@WeChat Official Account(微信公众号):猿说python
@Github:www.github.com @File:python_variable.py
@Time:2019/10/24 21:25 @Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
""" #整形变量
a = 10
print("整形变量a修改之前地址:{}".format(id(a)))
a = 20
print("整形变量a修改之后地址:{}".format(id(a)))
print("***"*20) #浮点数变量
a = 10.5
print("浮点数变量a修改之前地址:{}".format(id(a)))
a = 20.2
print("浮点数变量a修改之后地址:{}".format(id(a)))
print("***"*20) #字符串变量
a = "hello"
print("字符串变量a修改之前地址:{}".format(id(a)))
a = "world"
print("字符串变量a修改之后地址:{}".format(id(a)))
print("***"*20) #布尔值变量
a = False
print("布尔值a修改之前地址:{}".format(id(a)))
a = True
print("布尔值a修改之后地址:{}".format(id(a)))
print("***"*20) #元组的数据不能修改,否则会报错

输出结果:

整形变量a修改之前地址:1994744256
整形变量a修改之后地址:1994744576
************************************************************
浮点数变量a修改之前地址:2713286559088
浮点数变量a修改之后地址:2713286559136
************************************************************
字符串变量a修改之前地址:2713269294224
字符串变量a修改之后地址:2713269272112
************************************************************
布尔值a修改之前地址:1994252480
布尔值a修改之后地址:1994252448
************************************************************

3.可变数据类型

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

#列表
a = list()
print("列表a修改之前地址:{}".format(id(a)))
a.append(20)
print("列表a修改之后地址:{}".format(id(a)))
a.append(False)
print("列表a修改之后地址:{}".format(id(a)))
a.append("hello")
print("列表a修改之后地址:{}".format(id(a)))
print("***"*20) #字典
a = dict()
print("字典a修改之前地址:{}".format(id(a)))
a["name"]="zhangsan"
print("字典a修改之后地址:{}".format(id(a)))
a["age"]=18
print("字典a修改之后地址:{}".format(id(a)))
a["sing_dog"]=True
print("字典a修改之后地址:{}".format(id(a)))
print("***"*20)

输出结果:

列表a修改之前地址:2067294579016
列表a修改之后地址:2067294579016
列表a修改之后地址:2067294579016
列表a修改之后地址:2067294579016
************************************************************
字典a修改之前地址:2067294527992
字典a修改之后地址:2067294527992
字典a修改之后地址:2067294527992
字典a修改之后地址:2067294527992
************************************************************

三.重点总结

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. dbms_lob包学习笔记之三:instr和substr存储过程

    instr和substr存储过程,分析内部大对象的内容 instr函数与substr函数 instr函数用于从指定的位置开始,从大型对象中查找第N个与模式匹配的字符串. 用于查找内部大对象中的字符串的 ...

  2. RMQ问题及ST表

    RMQ(Range Minimum/Maximum Query)问题指的是一类对于给定序列,要求支持查询某区间内的最大.最小值的问题.很显然,如果暴力预处理的话复杂度为 \(O(n^2)\),而此类问 ...

  3. file 的类型 input

    上传你选择的文件和相关信息.在 HTML 文档中 <input type="file"> 标签每出现一次,一个 FileUpload 对象就会被创建.该元素包含一个文本 ...

  4. tensorflow 2.0 学习(四)

    这次的mnist学习加入了测试集,看看学习的准确率,代码如下 # encoding: utf-8 import tensorflow as tf import matplotlib.pyplot as ...

  5. learning java FileInputStream

    public class FileInputStreamTest { public static void main(String[] args) throws IOException { var f ...

  6. Windbg命令脚本流程控制语句详解

    在Windbg命令脚本一文里,我们介绍了命令脚本语言的的组成要素,在本文里将对语句进行展开的讲解.这些语句主要是流程控制的语句,比如我们常见的条件分子和循环语句等. ; (命令分隔符) 分号(:)字符 ...

  7. 【批处理】for命令

    for 命令 学习:https://www.cnblogs.com/Braveliu/p/5081087.html FOR这条命令基本上都被用来处理文本,但还有其他一些好用的功能! 看看他的基本格式( ...

  8. Linux 系统管理——引导过程与服务控制

    一. 系统引导流程 1.开机自检(BIOS)(基本的输入输出系统) 2.MBR引导1.2. MBRIS 当从本机硬盘中启动系统时,首先根据硬盘第一个扇区中MBR (Master Boot Record ...

  9. 【数位DP】数字统计

    题目 给定两个正整数a和b,求在[a,b]中的所有整数中,每个数码(digit)各出现了多少次. 数位DP (1)分情况,逐位讨论. (2)模型:计算在[L,R]中有多少个数满足条件. (3)套路:将 ...

  10. 树莓派从烧录系统到通过wifi远程访问(新树莓派配置,无显示器、网线、键盘)

    本文通过MetaWeblog自动发布,原文及更新链接:https://extendswind.top/posts/technical/raspberry_from_install_to_remote_ ...