可变与不可变类型
python中的数据类型根据底层内存机制分为可变与不可变两种。
id()
内建函数id()
返回值的内存地址。
>>> a = 1
>>> id(a)
4382612480
这里的内存地址是解释器里转换成十进制整数的虚拟地址。
可变类型
可变数据类型的数据实例,也称为可变对象。可变对象可以在其id()
保持固定不变的情况下改变其取值。
下面的列表,修改值后,id保持不变
>>> ls = [1,2,3]
>>> id(ls)
140453670614592
>>> ls[0] = 'a'
>>> print(ls)
['a', 2, 3]
>>> id(ls)
140453670614592
基本数据类型中,列表,集合,字典都是可变数据类型。
不可变类型
如果修改一个对象的值,必须创建新的对象,那么这个对象就是不可变对象。基本数据类型中,数字,字符串,元组是不可变类型。
例如下面的字符串,修改内容后id发生了改变,也即是创建了新的对象。
>>> s = 'hello'
>>> id(s)
140453671058032
>>> s = 'Hello'
>>> id(s)
140453671057264
不可变类型在需要常量哈希值地方起着重要的作用。
可哈希对象
python中一个对象的哈希值如果在其生命周期内绝不改变,就被称为可哈希。
可哈希对象都可以通过内置函数hash
进行求值。因为底层计算的原因,可以通过是否可哈希判断对象是否可变。
凡是可哈希的对象都是不可变对象,凡是不可哈希的对象都是可变对象。
>>> hash(1)
1
>>> hash('a')
8371404579657727211
>>> hash([1,2])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)