python中数据类型(红色为可变类型)
1、字符串 str
2、布尔类型 bool
3、整数 int
4、浮点数 float
5、元组 tuple
6、日期 date
7、列表 list
8、字典 dict
9、集合 set
可变类型和不可变类型的定义
这个定义是基于内存地址来说的
可变数据类型:变量引用的数据类型,在更改数值的时候,存在不开辟新内存的行为,此数据类型为可变数据类型。
不可变数据类型 :变量引用的数据类型,在更改数值的时候,不存在不开辟新内存的行为,此数据类型为不可变数据类型。
不可变类型
整数
整数数值改变,其内存地址也改变;数值相等,其内存地址也相同
num = 1
print(id(num))
num = num + 1
print(id(num))
example = 2
print(id(example))
结果:
4440852832 4440852864 4440852864
浮点数
浮点数数值改变,其内存地址也改变;数值相等,其内存地址不相同,这个跟Python的内存管理机制有关,两个1.5的浮点数并非真正相等,可能存在极小的差别
num = 1.5
print(id(num))
num = num + 1
print(id(num))
example = 1.5
print(id(example))
结果:
140566113632304 140566113632624 140566113632656
字符串
字符串数值改变,其内存地址也改变;数值相等,其内存地址相同。
只能对字符串变量进行整体赋值而不能修改字符串中的元素值
string = 'abc'
print(id(string))
string = 'abcd'
print(id(string))
string2 = 'abcd'
print(id(string2))
string[1]='x'
结果: 140565997429424 140566128170928 140566128170928 --------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-18-ef487a10d5f3> in <module> 8 print(id(string2)) 9 ---> 10 string[1]='x' TypeError: 'str' object does not support item assignment
元组
元组数值改变,其内存地址也改变;数值相等,其内存地址不相同。
只能对元组变量进行整体赋值而不能修改字符串中的元素值,但当元素为可变类型(如list)除外(不能对其中的元素进行赋值,但可使用append等方法)
tup = ('a','b','c')
print(id(tup))
tup2 = ('a','b','c')
print(id(tup2))
tup = ('a','b','c','d')
print(id(tup))
tup[1] = 'w'
结果:
140566113650048 140566131537728 140566128174560
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-24-4265e7d750f8> in <module> 8 print(id(tup)) 9 ---> 10 tup[1] = 'w' TypeError: 'tuple' object does not support item assignment
tup = ('a',[1,2],'c')
tup[1].append(3)
tup
结果:
('a', [1, 2, 3], 'c')
可变类型
列表
可修改列表的元素值而内存不发生变化
list = ['a','b','c','d','e','f','g']
print(id(list))
list[1] = 'w'
print(id(list))
print(list)
结果:
1490101031496
1490101031496
['a', 'w', 'c', 'd', 'e', 'f', 'g']
字典
同列表,略
集合
同列表,略