关于可变类型和不可变类型的探究

文章探讨了在Python和C语言中不可变类型内存地址的特性,发现Python的内存地址在多次运行时有变化,而C语言内存地址则是固定的。这与系统架构和资源管理策略有关。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

个人猜想(很遗憾失败了)

在硬盘或者系统中存在一个字符集

如果存在硬盘中,那么硬盘出厂的时候他的字符集所占用的空间就已经确定了。

如果存在于系统的话,硬盘应该在出厂的时候为系统设置一个存储系统字符集的地方。在安装系统的时候,把这个字符集放入约定的内存空间中。

当然,这个字符集不管是存在硬盘还是系统自带,硬盘中的这片内存区域是不允许改变的。所以不可变类型的原因就找到了。

文心一言告诉我,确实存在一个字符集,但并不存在于硬盘中,而是存在系统中,用于处理数据

不过可以确定的是,这些不可变数据的创建及存储是有一定规律的

测试一下

使用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,一时间大量的疑问涌入脑中,好吧,时间有限,停止思考,疑问封存

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值