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


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

查看所有标签

猜你喜欢:

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

网页设计

网页设计

顾群业 / 山东美术 / 2007-1 / 42.00元

网页设计,是指网页设计者以既有的技术和艺术知识为基础,依照设计目的和要求,自觉地对网页的构成元素进行艺术构思,创造出艺术化、人性化的网站界面。如今,网页设计也发展成为一种新的艺术形式,是设计艺术的重要组成部分。优秀的网页设计,不仅要有鲜明的主题、统一的风格,还要求内容与形式的高度统一。一起来看看 《网页设计》 这本书的介绍吧!

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具