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

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

1.名词解释

  如下全部的内容都是基于内存地址来讲的。数组

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

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

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

2.数据类型分类

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

  2.1 整型

a = 1
print(id(a),type(a))
a = 2
print(id(a),type(a))

1912499232 <class 'int'>
1912499264 <class 'int'>
View Code

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

  2.2 字符串

b = 'djx'
print(id(b),type(b))
b = 'djx1996'
print(id(b),type(b))

535056476344 <class 'str'>
535056476624 <class 'str'>
View Code

咱们能够发现,当数据发生改变后,变量的内存地址发生了改变,那么字符串就是不可变数据类型code

     2.3  元组

元组被称为只读列表,即数据能够被查询,但不能被修改,可是咱们能够在元组的元素中存放一个列表,经过更改列表的值来查看元组是属于可变仍是不可变。blog

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'> 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] <class 'list'> 808140621128
[1, 'q', 'qwer', True, 'djx'] <class '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'} <class 'dict'> 256310956320
{1: 1, 'key2': 'djx', 'key3': 'li', 'key4': 'haha'} <class 'dict'> 256310956320
View Code

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

 

数据类型 可变/不可变
整型 不可变
字符串 不可变
元组 不可变
列表 可变
集合 可变
字典 可变
相关文章
相关标签/搜索