方法
如题,那么为什么,因为不可变类型恰恰是Python的核心类型中的核心类型!
例如数字、字符串,可以说其他所有的类型都是基于这类不可变类型之上的。
而元组,是为了安全,而将一个可变类型的列表去掉可变的方法,在一些严格的环境下应用。
数字、字符串同理,安全、专一!
数据结构
可变类型的特点,数据可以增减,变量的特点,id不变,那么数据的增减是建立在对数据区的编辑上的,而数据区的大小不固定,由于内存的分配问题,数据区是无法与id绑定的,所以可变类型都是id即变量内容处的数据部分都存放着数据区的地址,而数据区又存放着元素变量的地址,这样一链接一链,猜到了元素内容。
而不可变类型,他的id就是他的全部,从区域内读取变量地址,至变量内容区域。直接就是变量内容,通常是变量内容长度+变量内容,例如元组、字符串,整数也是不过他存放的是数据块数。少部分有不是很用得到的地址,例如包含非ascii的字符串,虽然他标了地址,但大概有其他原因,例如之间的内存可能有其他用途,总之,除了元组的推导式,会在过程中来回移动数据,不过变量名生成的时候是元组推到完成之后。
总的来说,不可变类型省去了数据区的链接,因为不需要扩展。
Python的变量机制
1、生成变量内容
2、在区域内写入变量名称和对应的地址
所以是先有内容,再有变量,当变量被重新赋值时:
1、生成新的变量内容
2、将区域内变量名称对应的地址用新的变量内容的地址覆盖
3、之前的变量内容会被系统清理掉
a=1
print((id('a').to_bytes(length=8, byteorder='little'