数据类型分为可变数据类型和不可变数据类型,可变数据类型是指当数据类型对应的变量发生了改变,并且对应的内存地址不会改变。不可变数据类型是指数据类型发生了改变,相应的变量对应的内存地址也发送了改变。这里提示一下查看变量的内存地址使用内置函数id()。下面针对前面所学的几种数据类型进行一下举例:

列表(list)

先声明一个变量,赋值一个列表,修改原列表的元素后,列表的内存地址不变。修改前后的列表变量名指向同一个内存地址。看下面的例子:

#!/usr/bin/python3
#coding:utf-8
#吴老二个人博客~~~www.wulaoer.or
wulaoer = ['golong','DevOps']
print(wulaoer,id(wulaoer),type(wulaoer))
wulaoer[1]='ruby'
print(wulaoer,id(wulaoer),type(wulaoer))
输出结果:
['golong', 'DevOps'] 2633278695176 
['golong', 'ruby'] 2633278695176 
列表修改后内存地址没有发生改变,所以是可变类型。
字典(dict)
申明的字典变量,修改字典中的一个元素的value,修改后的字典和新字典的内存地址不变,看下面的例子:
#!/usr/bin/python3
#coding:utf-8
#吴老二个人博客~~~www.wulaoer.or
wulaoer = {'golong':'DevOps','java':'ruby'}
print(wulaoer,id(wulaoer),type(wulaoer))
wulaoer['java']='jenkins'
print(wulaoer,id(wulaoer),type(wulaoer))
输出结果:
{'golong': 'DevOps', 'java': 'ruby'} 2357833006680 
{'golong': 'DevOps', 'java': 'jenkins'} 2357833006680 
字典修改元素之后内存地址没有发生改变,所以是可变类型。
整数(int)
申明的整数变量,重新赋值即是修改,重新赋值后内存地址发送了改变,看下面的例子:
#!/usr/bin/python3
#coding:utf-8
#吴老二个人博客~~~www.wulaoer.or
wulaoer = 27
print(id(wulaoer),type(wulaoer))
wulaoer = 2
print(id(wulaoer),type(wulaoer))
输出结果:
1793617744 
1793616944 
内存地址发生了改变,整数为不可变类型.
字符串(str)
字符串和整数一样修改字符串的值相当于重新赋值,赋值后的内存地址发生变化。
#!/usr/bin/python3
#coding:utf-8
#吴老二个人博客~~~www.wulaoer.or
wulaoer = 'python3'
print(id(wulaoer),type(wulaoer))
wulaoer = 'python'
print(id(wulaoer),type(wulaoer))
输出结果:
2856968604560 
2856971152104 
内存地址发生了改变,字符串为不可变类型
元组(tuple)
元组是不能修改的,所以在元组中嵌套了一个列表,修改列表后内存地址没有发送改变,所以元组是不可变类型
#!/usr/bin/python3
#coding:utf-8
#吴老二个人博客~~~www.wulaoer.or
wolf = ['golong','DevOps']
wulaoer = ('python3','ruby',wolf)
print(wulaoer,id(wulaoer),type(wulaoer))
wolf[1]='java'
print(wulaoer,id(wulaoer),type(wulaoer))
输出结果:
('python3', 'ruby', 'python3', 'DevOps')
('python3', 'ruby', ['golong', 'DevOps']) 2335573760400 
('python3', 'ruby', ['golong', 'java']) 2335573760400 
元组修改了,但是内存地址没有改变,这是因为元组中的列表元素修改前后,嵌套的列表内存地址都不会改变,所以元组的内存地址也不会改变。所以元组是不可更改的,所以元组也是不可变类型。
集合(set)
在集合中添加了一个元素,对比添加前后的集合,数据发生了改变,内存地址没有变化。
#!/usr/bin/python3
#coding:utf-8
#吴老二个人博客~~~www.wulaoer.or
wulaoer = {'golong','DevOps'}
print(wulaoer,id(wulaoer),type(wulaoer))
wulaoer.add('ruby')
print(wulaoer,id(wulaoer),type(wulaoer))
输出结果:
{'golong', 'DevOps'} 2149145806664 
{'ruby', 'golong', 'DevOps'} 2149145806664

集合修改元素之后,内存地址没有发生改变,所以是可变类型

总结:

可变类型包括list(列表),dict(字典),set(集合)。

不可变类型包括Number(数字),str(字符串),tuple(元组)。那么什么是可变类型什么是不可变类型呢?你明白了吗?