存储技术分为哪三类 python模块分为哪三类

2025-01-2312:42:17销售经验0

在编程世界里,我们无时无刻不在与对象打交道,那么到底什么是对象呢?

对象其实可以理解为被分配的内存空间,这个空间可以连续也可以不连续。在这片空间里,存储了特定的数据,并附带了一些操作这些数据的方法。根据对象是否可变以及内存大小是否固定,我们可以对对象进行分类。

  • 不可变对象与可变对象;
  • 定长对象与变长对象。

接下来,让我们详细解释一下这些概念。

原来 a = 666,而当我们说操作一个变量其实就是操作这个变量指向的内存时,a += 1 就会将 a 指向的整数对象 666 和 1 进行加法运算,得到 667。会开辟新的空间来存储 667,然后让 a 指向这片新的空间。

关于引用计数和对象的关系,我们稍后再详细解释。目前只需要知道,当一个对象被一个变量引用时,该对象的引用计数就会加一。

在 Python 中,对象本质上就是 C 语言中通过 malloc 函数为结构体在堆区申请的内存。每个 Python 对象在 C 中都有一个对应的结构体,这个结构体除了存储具体的值外,还存储了一些额外的信息。

在 Python 中列表的内部并不直接存储具体的对象值,而是存储了对象的指针。例如 lst = [1, 2, 3],你以为列表存储的是三个整数对象吗?其实不是的,它存储的是这三个整数对象的指针。当我们使用 lst[0] 时,拿到的是一个指针,但在操作(如打印)时会自动操作指针指向的内存。

由于 Python 是用 C 语言实现的,列表的实现必然要借助 C 的数组。但 C 数组中的元素类型必须一致,而 Python 的列表却可以存放任意类型的元素。因此从某种意义上说,列表中的元素不可能是对象本身,因为不同的对象在底层对应的结构体是不同的。所以元素只能是指针。

关于定长和变长对象的区别:定长对象和变长对象的差异主要在于它们所占用的内存大小是否固定。像字符串长度不同所占的内存也不同是变长对象;而浮点数因为所占用的内存大小始终不变则是定长对象。

至于 Python 如何计算对象所占的内存大小以及更多关于对象的底层细节,我们将在后续的剖析中详细介绍。

无论是可变对象还是不可变对象,定长对象还是变长对象,它们都是程序开发中不可或缺的部分。理解这些概念有助于我们更好地掌握编程语言并编写出更高效的代码。

  • 版权说明:
  • 本文内容由互联网用户自发贡献,本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 295052769@qq.com 举报,一经查实,本站将立刻删除。