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

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

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

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

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

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

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

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

测试一下

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

相关推荐

  1. 解释Python中可变类型不可类型

    2024-02-03 05:42:03       42 阅读
  2. Python 量、数据类型、数据类型转换介绍

    2024-02-03 05:42:03       35 阅读
  3. 数据库-列类型-Enum类型set类型

    2024-02-03 05:42:03       45 阅读
  4. 不同类型 I/O 实现方式组件

    2024-02-03 05:42:03       54 阅读
  5. 关于MySql字段类型实践总结

    2024-02-03 05:42:03       65 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-03 05:42:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-03 05:42:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-02-03 05:42:03       82 阅读
  4. Python语言-面向对象

    2024-02-03 05:42:03       91 阅读

热门阅读

  1. ++i(前置自增)和 i++(后置自增)的区别

    2024-02-03 05:42:03       41 阅读
  2. 【前端插件工具】

    2024-02-03 05:42:03       49 阅读
  3. Vue.js 中父组件调用子组件的方法

    2024-02-03 05:42:03       49 阅读
  4. pip安装tf-gpu=2.4的bug解决方案

    2024-02-03 05:42:03       56 阅读
  5. wpf 消息传递

    2024-02-03 05:42:03       44 阅读
  6. Ubuntu 22.04 配置qtchooser默认启用 Qt6

    2024-02-03 05:42:03       51 阅读
  7. 使用深度学习框架飞浆Paddle实现的鲜花识别任务

    2024-02-03 05:42:03       35 阅读
  8. Linux系统各目录作用

    2024-02-03 05:42:03       42 阅读
  9. 服务器为什么老是被攻击?被攻击了怎么办?

    2024-02-03 05:42:03       53 阅读