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. wordpress如何调用特定页面模板

    我们在制作page页面时经常会调用特定的页面模板,比如专题页,其实我们只要做一个这样的模板就可以了,很简单,定义一下,代码如下,Template Name: service就是具体的页面模板名,这个在 ...

  2. mysql udf提权

    参考文章:https://blog.csdn.net/q1352483315/article/details/98483668

  3. CentOS7下安装Python3和PIP3

    为了方便以后编译,所以整合了下配置流程 先查看是否安装了Python3 python3 -V 如果没有安装,则先安装依赖包 yum install zlib-devel bzip2-devel ope ...

  4. 使用readthedocs 发布 sphinx doc文档

    readthedocs 是由社区驱动的开源sphinx doc 托管服务,我们可以用来方便的构建以及发布文档 这是一个简单的demo 项目,使用了用的比较多的sphinx_rtd_theme 主题,主 ...

  5. GoCN每日新闻(2019-10-09)

    GoCN每日新闻(2019-10-09) GoCN每日新闻(2019-10-09) 1. 我们如何将服务延迟减少了98% https://blog.gojekengineering.com/the-n ...

  6. C#访问https地址实例

    程序访问的网址从http换成了https,安全性更高了,程序对网址的访问也要改一下 C#访问https地址实例如下 namespace ConsoleApp2 { public class Progr ...

  7. 第12组 Beta冲刺(4/5)

    Header 队名:To Be Done 组长博客 作业博客 团队项目进行情况 燃尽图(组内共享) 展示Git当日代码/文档签入记录(组内共享) 注: 由于GitHub的免费范围内对多人开发存在较多限 ...

  8. mysql lower()函数

    mysql> select " DFREF"; +--------+ | DFREF | +--------+ | DFREF | +--------+ row in set ...

  9. pytorch中tensor数据和numpy数据转换中注意的一个问题

    转载自:(pytorch中tensor数据和numpy数据转换中注意的一个问题)[https://blog.csdn.net/nihate/article/details/82791277] 在pyt ...

  10. <英狼>--团队作业3 王者光耀--终极版

    队员 陶俊宇_031702113 卞永亨_031702229 唐怡_031702109 Github 吉哈---King-Shines 队员输出百分比,数据为估值仅供参考 MVP:队长:陶俊宇 60% ...