Python的可变和不可变类型
一、可变类型(不可哈希类型就是可变类型-->unhashable)
值改变,id不变,证明改的是原值,证明原值是可以改变的。
总结:list[],dict{},都为可变类型,整体的地址不变,变的是里面的值,针对字典多说点:key必须是不可变类型,value可以是任意类型。
# list是可变类型
l=['aaa','bbb','ccc']
print(id(l)) # -->31194624
l[0]= 2
print(l) # [2, 'bbb', 'ccc']
print(id(l)) # -->31194624
l[1] = True
print(l) # [2, True, 'ccc']
print(id(l)) # -->31194624
l[2] = [4,5,6,]
print(l) # [2, True, [4, 5, 6]]
print(id(l)) # -->31194624
dict 可变类型
dic={'k1':111,'k2':222}
print(id(dic)) # --> 31210112
dic['k1']=3333333333
print(dic) # {'k1': 3333333333, 'k2': 222}
print(id(dic)) # --> 31210112
# 关于字典补充:
# 定义:{}内用逗号分隔开多key:value,
# 其中value可以是任意类型
# 但是key必须是不可变类型
dic={
'k1':111,
'k2':3.1,
'k3':[333,],
'k4':{'name':'egon'}
}
print(id(dic))
#
dic={
2222:111,
3.3:3.1,
'k3':[333,],
'k4':{'name':'egon'}
}
print(id(dic))
# print(dic[3.3])
# dic={[1,2,3]:33333333} # --> TypeError: unhashable type: 'list'
# dic={{'a':1}:33333333} # --> TypeError: unhashable type: 'dict'
# 总结:不可哈希类型就是可变类型
二、不可变类型
值改变,id也改变,证明是产生新的值,压根没有改变原值,证明原值是不可以被修改的。
# int是不可变类型
x=10
print(id(x)) -->8791237908416
x=11 # 产生新值
print(id(x)) -->8791237908448
float是不可变类型
x=3.1
print(id(x)) # -->30373680
x=3.2
print(id(x)) # -->34764944
str是不可变类型
x="abc"
print(id(x)) # -->31187056
x='gggg'
print(id(x)) # -->4718128
bool不可变
a = True
print(id(a)) # -->8791233238864
b = True
print(id(b)) # -->8791233238864
c = False
print(id(c)) # -->8791233238896
d = False
print(id(d)) # -->8791233238896
print(id(True)) # -->8791233238864
print(id(False)) # -->8791233238896
总结:int类型,float类型,str类型,bool类型都是不可变类型,都被设计成了不可分割的整体,不能够被改变。
为什么说不可分割?例如:10 为不可分割,为什么10 + 1 =11,11是一个新的不可分割的值。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程