在学习python过程中我们一定会遇到不可变数据类型和可变数据类型。

1.名词解释

以下所有的内容都是基于内存地址来说的。

不可变数据类型: 当该数据类型的对应变量的值发生了改变,那么它对应的内存地址也会发生改变,对于这种数据类型,就称不可变数据类型。

可变数据类型    :当该数据类型的对应变量的值发生了改变,那么它对应的内存地址不发生改变,对于这种数据类型,就称可变数据类型。

总结:不可变数据类型更改后地址发生改变,可变数据类型更改地址不发生改变

2.数据类型分类

在python中数据类型有:整型,字符串,元组,集合,列表,字典。接下来我们用例子来一一查看他们分别属于不可变数据类型还是可变数据类型。

2.1 整型

a = 1

print(id(a),type(a))

a= 2

print(id(a),type(a))1912499232

1912499264

View Code

我们可以发现,当数据发生改变后,变量的内存地址发生了改变,那么整型就是不可变数据类型。

2.2 字符串

b = 'djx'

print(id(b),type(b))

b= 'djx1996'

print(id(b),type(b))535056476344

535056476624

View Code

我们可以发现,当数据发生改变后,变量的内存地址发生了改变,那么字符串就是不可变数据类型。

2.3  元组

元组被称为只读列表,即数据可以被查询,但不能被修改,但是我们可以在元组的元素中存放一个列表,通过更改列表的值来查看元组是属于可变还是不可变。

c1 = ['1','2']

c= (1,2,c1)

print(c,id(c),type(c))

c1[1] = 'djx'print(c,id(c),type(c))

result:

(1, 2, ['1', '2']) 386030735432 (1, 2, ['1', 'djx']) 386030735432

View Code

我们可以发现,虽然元组数据发生改变,但是内存地址没有发生了改变,但是我们不可以以此来判定元组就是可变数据类型。我们回头仔细想想元组的定义就是不可变的。我们修改了元组中列表的值,但是因为列表是可变数据类型,所以虽然在列表中更改了值,但是列表的地址没有改变,列表在元组中的地址的值没有改变,所以也就意味着元组没有发生变化。我们就可以认为元组是不可变数据类型,因为元组是不可变的。

2.4  集合

集合我们常用来进行去重和关系运算,集合是无序的。

s = {1,'d','34','1',1}

print(s,type(s),id(s))

s.add('djx')

print(s,type(s),id(s))

result:

{'d', 1, '34', '1'} 870405285032{1, '34', 'djx', '1', 'd'} 870405285032

View Code

我们可以发现,虽然集合数据发生改变,但是内存地址没有发生了改变,那么集合就是可变数据类型。

2.5 列表

列表是python中的基础数据类型之一,其他语言中也有类似于列表的数据类型,比如js中叫数组,它是以[]括起来,每个元素以逗号隔开,而且它里面可以存放各种数据类型。

list = [1,'q','qwer',True]

print(list,type(list),id(list))

list.append('djx')

print(list,type(list),id(list))

result:

[1, 'q', 'qwer', True] 808140621128[1, 'q', 'qwer', True, 'djx'] 808140621128

View Code

我们可以发现,虽然列表数据发生改变,但是内存地址没有发生了改变,那么列表就是可变数据类型。

2.6 字典

字典是python中唯一的映射类型,采用键值对(key-value)的形式存储数据。python对key进行哈希函数运算,根据计算的结果决定value的存储地址,所以字典是无序存储的。但是在3.6版本后,字典开始是有序的,这是新的版本特征。

字典的key值可以是整型,字符串,元组,但是不可以是列表,集合,字典。

tuple = (1)

dic= {1:2}

d= { tuple:1,'key2':'djx','key3':'li'}

print(d,type(d),id(d))

d['key4'] = 'haha'print(d,type(d),id(d))

result:

{1: 1, 'key2': 'djx', 'key3': 'li'} 256310956320{1: 1, 'key2': 'djx', 'key3': 'li', 'key4': 'haha'} 256310956320

View Code

我们可以发现,虽然字典数据发生改变,但是内存地址没有发生了改变,那么字典就是可变数据类型。

数据类型

可变/不可变

整型

不可变

字符串

不可变

元组

不可变

列表

可变

集合

可变

字典

可变

python字符串可变吗_python中不可变数据类型和可变数据类型相关推荐

  1. python 字符串提取操作_python 中对字符串的操作

    一: 字符串基础介绍 python中定义的字符串是个常量,一旦定义后只能使用.不能修改 1.字符串的定义: s = ' aaaa' s = "bbbb " s = "&q ...

  2. python 字符串 包含 列表_python中包含字符串列表的列

    好吧,我已经试着找出这个问题的答案有一段时间了,但是结果是空的(基本上没有编写一个小的递归程序来扩展列表),我想这是因为,不管怎么说,乍一看,你试图做的并不是真的那么有效(Jimmy C关于列表可变的 ...

  3. python字符串怎么表示_python中字符串的几种表达方式(用什么方式表示字符串)...

    原博文 2018-11-21 18:45 − 说明: 今天在学习python的基础的内容,学习在python中如何操作字符串,在此记录下. 主要是python中字符串的几种表达,表示方式. pytho ...

  4. python字符串驻留机制_Python中的字符串驻留

    C#中的字符串驻留 熟悉.NET的人都应该知道C#中的字符串驻留机制,.NET维护了一个驻留池,它会把在编译期间就相同的字符串只保留一份拷贝.如果仅在运行期间值才相同的字符串变量,.NET才会为这个2 ...

  5. python字符串查找位置_python中怎么返回指定查找字符的位置

    展开全部 Python编程中对字符串进行搜索查找,并返回字符位e69da5e887aa62616964757a686964616f31333337396231置,案例代码如下:# multiple s ...

  6. python字符串的内部函数_Python中字符串中内置函数

    字符串内置函数 len () 返回字符串长度 如:age = 31415926 print(len(age)) 输出:长度8 string.encode ("utf-8") 指定字 ...

  7. python算法和数据结构_Python中的数据结构和算法

    python算法和数据结构 To 至 Leonardo da Vinci 达芬奇(Leonardo da Vinci) 介绍 (Introduction) The purpose of this ar ...

  8. python中的不可变对象_python中的可变与不可变对象

    什么是可变/不可变对象 不可变对象,该对象所指向的内存中的值不能被改变.当改变某个变量时候,由于其所指的值不能被改变,相当于把原来的值复制一份后再改变,这会开辟一个新的地址,变量再指向这个新的地址. ...

  9. python列表长度可变吗_python中列表长度可变吗

    python中列表长度可变,可变类型指的是内存id不变,type也不变的前提下,value是否是可变的.列表和字典都是可变类型,对于可变对象,比如list,对list进行操作,list内部的内容是会变 ...

最新文章

  1. REM——适合移动开发的自适应方案
  2. 第二章 Matlab变量
  3. 问题之JVM_Bind
  4. 打开wmware没反应_没呼吸没脉搏,溺水女孩危在旦夕!预产期只差9天的她挺着大肚子出手相助...
  5. linux有读EC RAM的工具吗,Step to UEFI (179)Shell下 EC Ram 读取工具
  6. Swagger——与WebAPI整合
  7. 一种低成本动态扩展 Java API 的解决方案 - Ricequant米筐量化
  8. 最大化 LoRa 长距离,秘籍2:接收灵敏度
  9. 企业微信4.0:上下游功能上线,用一款APP连接所有企业组织和用户
  10. 写在2021年的尾巴
  11. 数组:求绝对值最小的数
  12. 关键字const的使用总结
  13. Win11用户名和密码备份方法
  14. java泡妞代码_java泡妞小程序
  15. IP地址常见分类:A类、B类、C类、D类、E类
  16. 硬核小知识,网络管理员的技术职业规划《一》
  17. 微阵列数据特征选择的模因算法
  18. linux grep -r 查询相关名字的文件以及ps指令
  19. 如何完整卸载VMware——强力删除vmware-vmx.exe以及
  20. MFC Tab 控件使用

热门文章

  1. 中国消费金融的未来,已经到来——《消费金融真经》
  2. windows 清理桌面右键菜单
  3. js 预处理网页字体大小
  4. 完美解决Win11共享打印机连接错误0x00000709教程
  5. 计算机演示文稿方案文稿,全国计算机等级考试二级officeppt演示文稿题目
  6. 计算矩阵的秩、行空间、列空间、零空间、左零空间
  7. 华为m20升级鸿蒙,华为P30和Mate20用户别伤心,无缘第一批升级鸿蒙系统
  8. Android 沉浸式状态栏(QQ5.0透明状态栏的效果)
  9. AMD64和i386的区别
  10. 3D打印技术分类浅析