在Python中,数据类型根据其是否可以被原地修改分为可变类型和不可变类型。
目录
一、可变类型
含义:变量对应的值可以修改,但是内存地址不会发生改变
常见的可变类型:list、dict、set
1.1 列表(List)
- 使用方括号
[]
创建 - 可以原地添加、删除或修改元素
li = [1,2,3,4]
print("li的原内存地址:",id(li))
# 输出内容:li的原内存地址: 1703592022536
li.append(5)
print(li)
# 输出内容:[1, 2, 3, 4, 5]
print("li的现内存地址:",id(li))
# 输出内容:li的现内存地址: 1703592022536
1.2 字典(Dictionary)
- 使用花括号
{}
或dict()
创建 - 可以原地添加、删除或修改键值对
dict = {'a': 1, 'b': 2}
print(dict,"dict的原内存地址:",id(dict))
# {'a': 1, 'b': 2} dict的原内存地址: 2012083606056
dict['c'] = 3 # 添加键值对
dict['a'] = 4 # 修改键值对
print(dict,"dict的原内存地址:",id(dict))
# {'a': 4, 'b': 2, 'c': 3} dict的原内存地址: 2012083606056
del dict['b'] # 删除键值对
print(dict,"dict的原内存地址:",id(dict))
# {'a': 4, 'c': 3} dict的原内存地址: 2012083606056
1.3 集合(Set)
- 使用花括号
{}
或set()
创建,但注意花括号创建空集合时必须不带任何元素set()
,否则会被解释为字典。 - 可以原地添加或删除元素。
set = {1, 2, 3}
print(set,"set的原内存地址:",id(set))
# {1, 2, 3} set的原内存地址: 1379155669960
set.add(4) # 添加元素
print(set,"set的原内存地址:",id(set))
# {1, 2, 3, 4} set的原内存地址: 1379155669960
set.remove(2) # 删除元素
print(set,"set的原内存地址:",id(set))
# {1, 3, 4} set的原内存地址: 1379155669960
二、不可变类型
含义:存储空间保存的数据不允许被修改,如果修改就会生成一个新的值从而分配新的内存空间,这种数据就是不可变类型
1、数值类型:int, bool, float, complex
2、字符串:str
3、元组:tuple
eg:
-
整数(Integer)
- 例如
1
,2
,3
。 - 一旦创建,值不能改变。
- 例如
-
浮点数(Float)
- 例如
1.0
,2.5
,3.14
。 - 一旦创建,值不能改变。
- 例如
-
字符串(String)
- 使用单引号‘’、双引号
""
或三引号'''
/"""
创建。 - 一旦创建,值不能改变(可以重新赋值)
- 使用单引号‘’、双引号
-
元组(Tuple)
- 使用圆括号
()
创建,元素不可变,但整个元组本身可以赋值给另一个变量。 - 一旦创建,元组内的元素不能改变。
- 使用圆括号
-
布尔值(Boolean)
- 只有两个值:
True
和False
。 - 一旦创建,值不能改变。
- 只有两个值:
n = 10 # 整型
print("原地址:",n,id(n))
n = 15
print("修改后:",n,id(n))
# 原地址: 10 140727948770656
# 修改后: 15 140727948770816
# 内存地址不一样:修改n的值就会生成新的值,重新赋值给变量n
st = 'hello' # 字符串
print(st,id(st))
st = 'lq'
print(st,id(st))
# hello 2388701344624
# lq 2388701345648
tua = (1,2,3)
print(tua,id(tua))
# 不支持新增删除和修改操作
tua = ('a','b','c')
print(tua,id(tua))
# 元组,不支持新增删除和修改操作
# 输出结果:
# (1, 2, 3) 1892701515192
# ('a', 'b', 'c') 1892701515592