东莞市盛裕绒艺玩具有限公司

东莞市盛裕绒艺玩具有限公司

利记最新官方网址

15179542878
联系方式
全国服务热线: 15179542878

咨询热线:18531846012
联系人:何名山
地址:宁夏  中卫县中卫县城关镇西大街

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

来源:利记最新官方网址   发布时间:2019-11-23   点击量:333

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

1.名词解释

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

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

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

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

2.数据类型分类

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

  2.1 整型

a = 1print(id(a),type(a))a = 2print(id(a),type(a))1912499232 <class "int">1912499264 <class "int">View Code

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

  2.2 字符串

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

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

 

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

相关产品

COPYRIGHTS©2017 利记最新官方网址 ALL RIGHTS RESERVED 备案号:333