Python中不可变数据类型和可变数据类型

栏目: Python · 发布时间: 6年前

内容简介:在学习Python过程中我们一定会遇到不可变数据类型和可变数据类型。以下所有的内容都是基于内存地址来说的。不可变数据类型: 当该数据类型的对应变量的值发生了改变,那么它对应的内存地址也会发生改变,对于这种数据类型,就称不可变数据类型。

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

1.名词解释

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

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

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

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

2.数据类型分类

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

2.1 整型

a = 1

print

(id(a),type(a))

= 2
print

(id(a),type(a))

1912499232 < class ' int ' >
1912499264 < class ' int

'

>

View Code

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

2.2 字符串

b = ' djx '

print

(id(b),type(b))

= ' djx1996 '
print

(id(b),type(b))

535056476344 < class ' str ' >
535056476624 < class ' str

'

>

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 ' tuple ' > ( 1 , 2 , [ ' 1 ' , ' djx ' ]) 386030735432 ' tuple ' >
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 ' } ' set ' > 870405285032 { 1 , ' 34 ' , ' djx ' , ' 1 ' , ' d ' } ' set ' > 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] ' list ' > 808140621128 [ 1 , ' q ' , ' qwer ' , True, ' djx ' ] ' list ' > 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 ' } ' dict ' > 256310956320 { 1 : 1 , ' key2 ' : ' djx ' , ' key3 ' : ' li ' , ' key4 ' : ' haha ' } ' dict ' > 256310956320
View Code

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

数据类型 可变/不可变
整型 不可变
字符串 不可变
元组 不可变
列表 可变
集合 可变
字典 可变

更多Python相关信息见 Python 专题页面 https://www.linuxidc.com/topicnews.aspx?tid=17

Linux公社的RSS地址https://www.linuxidc.com/rssFeed.aspx

本文永久更新链接地址: https://www.linuxidc.com/Linux/2019-03/157357.htm


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

图解CIO工作指南(第4版)

图解CIO工作指南(第4版)

[日] 野村综合研究所系统咨询事业本部 / 周自恒 / 人民邮电出版社 / 2014-3 / 39.00

《图解CIO工作指南(第4版)》是一本实务手册,系统介绍了企业运用IT手段提高竞争力所必需的管理方法和实践经验,主要面向CEO或CIO等企业管理人士。 《图解CIO工作指南(第4版)》分为三个部分。第1部分的主题为IT管理,着重阐述运用IT技术提高企业竞争力所必需的所有管理业务,具体包括制定作为企业方针的IT战略,以及统筹执行该战略时与IT相关的人力、物力、财力、风险等要素在内的一系列管理业......一起来看看 《图解CIO工作指南(第4版)》 这本书的介绍吧!

URL 编码/解码
URL 编码/解码

URL 编码/解码

html转js在线工具
html转js在线工具

html转js在线工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具