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


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

查看所有标签

猜你喜欢:

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

Unity 3D脚本编程

Unity 3D脚本编程

陈嘉栋 / 电子工业出版社 / 2016-9-1 / 79

《Unity 3D脚本编程——使用C#语言开发跨平台游戏》以Unity 3D 的跨平台基础Mono,以及其游戏脚本语言C#为基础进行讲解。全面系统地剖析了Unity 3D 的跨平台原理以及游戏脚本开发的特点。 第1 章主要介绍了Unity 3D 引擎的历史以及编辑器的基本知识;第2 章主要介绍了Mono,以及Unity3D 利用Mono 实现跨平台的原理,并且分析了C#语言为什么更适合Uni......一起来看看 《Unity 3D脚本编程》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

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

Markdown 在线编辑器

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

HEX HSV 互换工具