个人猜想(很遗憾失败了)
在硬盘或者系统中存在一个字符集
如果存在硬盘中,那么硬盘出厂的时候他的字符集所占用的空间就已经确定了。
如果存在于系统的话,硬盘应该在出厂的时候为系统设置一个存储系统字符集的地方。在安装系统的时候,把这个字符集放入约定的内存空间中。
当然,这个字符集不管是存在硬盘还是系统自带,硬盘中的这片内存区域是不允许改变的。所以不可变类型的原因就找到了。
文心一言告诉我,确实存在一个字符集,但并不存在于硬盘中,而是存在系统中,用于处理数据
不过可以确定的是,这些不可变数据的创建及存储是有一定规律的
测试一下
使用python输出不可变类型的内存地址
结论:
经过多次运行,这个内存地址在一个时间段内输出的内容是相同的
应该是某种机制在保护,程序结束后并不释放内存空间
而是等待一段时间的下次调用,用来节省资源的消耗
但是结果的差值都为32
a=1
b=2
print("a=",id(a))
print("b=",id(b))
"""
a= 140731726750504
b= 140731726750536
"""
"""
a= 140731562451752
b= 140731562451784
"""
使用 C语言输出不可变类型的内存地址
测试了一下C语言的,发他的内存地址是固定不会变化的
于是我想起来C语言编译型语言,于是又重新创建了一个代码相同的文件,结果竟然是相同的
#include <stdio.h>
int main() {
int a = 1;
int b = 2;
printf("变量a的内存地址是:%d\n", &a);
printf("变量b的内存地址是:%d\n", &b);
return 0;
}
//变量a的内存地址是:6422300
//变量b的内存地址是:6422296
尝试使用虚拟机的ubuntn系统下运行
python测试
结果显示差值为168,但是不会在一段时间内改变
a=1
b=2
print("a=",id(a))
print("b=",id(b))
"""
a= 10894368
b= 10894400
"""
C语言测试
发现每一次的结果都不同,但是每次都相差4,由此想到了系统架构是64还是32,一时间大量的疑问涌入脑中,好吧,时间有限,停止思考,疑问封存