数据类型分为可变数据类型和不可变数据类型,可变数据类型是指当数据类型对应的变量发生了改变,并且对应的内存地址不会改变。不可变数据类型是指数据类型发生了改变,相应的变量对应的内存地址也发送了改变。这里提示一下查看变量的内存地址使用内置函数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 <class 'list'> ['golong', 'ruby'] 2633278695176 <class 'list'>
列表修改后内存地址没有发生改变,所以是可变类型。
字典(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 <class 'dict'> {'golong': 'DevOps', 'java': 'jenkins'} 2357833006680 <class 'dict'>
字典修改元素之后内存地址没有发生改变,所以是可变类型。
整数(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 <class 'int'> 1793616944 <class 'int'>
内存地址发生了改变,整数为不可变类型.
字符串(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 <class 'str'> 2856971152104 <class 'str'>
内存地址发生了改变,字符串为不可变类型
元组(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 <class 'tuple'> ('python3', 'ruby', ['golong', 'java']) 2335573760400 <class 'tuple'>
元组修改了,但是内存地址没有改变,这是因为元组中的列表元素修改前后,嵌套的列表内存地址都不会改变,所以元组的内存地址也不会改变。所以元组是不可更改的,所以元组也是不可变类型。
集合(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 <class 'set'> {'ruby', 'golong', 'DevOps'} 2149145806664 <class 'set'>
集合修改元素之后,内存地址没有发生改变,所以是可变类型
总结:
可变类型包括list(列表),dict(字典),set(集合)。
不可变类型包括Number(数字),str(字符串),tuple(元组)。那么什么是可变类型什么是不可变类型呢?你明白了吗?
您可以选择一种方式赞助本站
支付宝扫一扫赞助
微信钱包扫描赞助
赏