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

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

内容简介:在学习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


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

查看所有标签

猜你喜欢:

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

失控的未来

失控的未来

[美]约翰·C·黑文斯 / 仝琳 / 中信出版集团 / 2017-4-1 / 59.00元

【编辑推荐】 20年前,尼古拉•尼葛洛庞帝的《数字化生存》描绘了数字科技给人们的工作、生活、教育和娱乐带来的冲击和各种值得思考的问题。数字化生存是一种社会生存状态,即以数字化形式显现的存在状态。20年后,本书以一种畅想的形式,展望了未来智能机器人与人类工作、生活紧密相联的场景。作者尤其对智能机器人与人类的关系,通过假设的场景进行了大胆有趣的描述,提出了人工智能的未来可能会面临的一些问题。黑文......一起来看看 《失控的未来》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码