当前位置: 首页 > article >正文

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

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

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

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

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

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

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

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

测试一下

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


http://www.kler.cn/a/228840.html

相关文章:

  • 动手学大数据-3社区开源实践
  • 【算法】算法基础课模板大全——第一篇
  • JavaEE之CAS
  • 时序数据库TDengine 3.3.5.0 发布:高并发支持与增量备份功能引领新升级
  • sparkSQL练习
  • 具体场景的 MySQL 与 redis 数据一致性设计
  • MacOS系统电脑远程桌面控制windows系统电脑【内网穿透】
  • AI监控+智能充电桩系统如何缓解新能源汽车充电难问题
  • nginx去掉前端配置的路径前缀
  • C++ 动态规划 最长上升子序列2 朴素做法的优化
  • MySQL核心查询语句详解
  • Unity类银河恶魔城学习记录1-11 PlayerPrimaryAttack P38
  • RK3588开发板Ubuntu与开发板使用U盘互传
  • 【Linux】生产者消费者模型
  • 静态库和动态库
  • vue全屏,退出全屏、监听ESC退出全屏
  • 01背包问题 动态规划
  • CAN通信----(创芯科技)CAN分析仪----转CANTest使用
  • 2024年2月CCF-全国精英算法大赛题目
  • 前端面试题——Vue的双向绑定
  • <网络安全>《16 网络安全隔离与信息单向导入系统》
  • 计算机视觉实战项目3(图像分类+目标检测+目标跟踪+姿态识别+车道线识别+车牌识别+无人机检测+A*路径规划+单目测距与测速+行人车辆计数等)
  • 【HarmonyOS应用开发】Web组件的使用(十三)
  • 壹[1],Xamarin开发环境配置
  • linux的nginx安装
  • 复旦大学NLP团队发布86页大模型Agent综述