【python入门到精通】理解python中的内存·类型本质·以及连续储存以及顺链表的概念

简介: 【python入门到精通】理解python中的内存·类型本质·以及连续储存以及顺链表的概念

🚀 作者 :“大数据小禅”


🚀 粉丝福利 :加入小禅的大数据社群


🚀 欢迎小伙伴们 点赞👍、收藏⭐、留言💬


目录

内存·本质·连续储存:

这一个章节将会讲到的是,关于python中的内存问题,这个问题很容易被忽视,但却是作为python底层实现必不可少的一个环节,本篇文章将带你彻底了解python内存与类型的本质。


内存·本质·连续储存:

现在有一串整形数字,整形是基本的数据类型,要保存这串数字,你可能想到的是产生一个列表啊他们存进去,但是现在要把你所学的高级数据类型(元组,字典,列表)全部抛弃掉,只记住整型,浮点型,字符串。现在考虑的是如何把一个整形的储存,要研究的是他存的时候到底是一个什么概念,这里就要引入内存的概念。


内存是跟cpu搭钩的,内存的基本单位是一个字节的,而一个字节是8位的。


现在比如说有一个数字100,那么内存cpu到底是在哪里去找100这个数字呢?下图所示,是一个连续的存储单元跟存储空间,假如说100现在是存储到那空间中,那么你是不是需要告诉计算机要从哪个位置把这个数字给取出来?那么现在,给那片连续的空间标出一个位置(0X01…这里比如100放进了0X03这个位置),那么这个时候再要去照这个数字的时候,只需要告诉计算机0X03这个位置,之后计算机把这个位置的数据取出去,这个东西是跟硬件有关系的,也就是说计算机中的内存是这样连续的存储空间(如下图),而连续的存储空间呢他是由单元组成的,那么基本的单元是什么呢?就代表的是图中的字节(那一列八个空格那里),他把一个字节作为一个标识,(一个字节8位)一个字节的8位整体会作为一个地址标识,那么我们告诉计算机去OXO1找的时候(举例),计算机能够直接去找到这个OXO1所标识的这个存储空间,一下子它能读出8位来。也就是说,计算机在进行标识的时候,他是按照一定的存储单元进行标识的,那在存数据的时候也就需要有多个存储单元来放到一起了。


image.png如果有一个整型,那么这个整形要占多少位呢?那么现在就有一个类型的概念,之前学变量直接就给你引出了变量有(整形,浮点型,字符串类型),那么这类型到底是什么概念,他的本质是什么东西呢?他就决定了,如果有一个整型数据,那么我在内存当中到底要申请多少个存储单元来把这个数给存起来,这是我们需要解决的问题。那么,如果是一个整型的话,他要在内存中占多少个存储单元呢,对于32位机器来说的话,整型是要存4个字节的,也就是说它要占4个单元。比如现在有个 int a=1(0000 00001),你现在看起来他是一个整数,那么在内存中他是要把1转成二进制存起来的,我们看到的一个1,在计算机内部其实是占了4个存储单元(如下图演示)。一个字符占一个字节,类型不同占的内存单元不同,这就是内存的本质之一,不同的类型,在计算机中占了不同的位置。如果说存的时候你告诉计算机,你存的是一个整型,那么它取出来的时候就是一个整型1,而如果你告诉计算机他是4个字符的话,那么取出来的数就不是整型了,而是4个字符,4*char。所以说第二点就是,计算机在拿到它的时候怎么去对待他的问题。


为什么要说到这个东西呢?因为计算机中所有高级的数据结构,都是由这些基本 的数据类型组成的,那么基础的数据类型又会涉及到内存,即这些数据要怎么存?



image.png往下走,那里有五个整型,那么计算机要怎么保存他?以int=1,2,3举例,如果现在要把这三个存储起来,下面一个方块对应图中4 个字节,如果这三个数字是没有联系的,那么就按照上面的储存,但是现在这上方块是存在某种联系的,那现在就把三个整数给连续存放起来的话,找的时候可不可以方便去找,现在用列表装起来li=[1,2,3]。


image.png这列表中的三个数字会有一个起始的数字,假设这个起始的数字是1,如果现在要去找这集合中的第三位置的元素是谁,那可以直接通过第一个位置的偏移直接找到第三位置的数字。第一个找第二儿个其实为位置的时候就往后偏4个位置去找。也就是说通过依次计算就可以定位到你要找的数字。如果我们采用连续储存的方式去储存数据的话,那么我们要去索引的时候那就会变得很简单。如果分开去放的话,那么这上数字就没有联系了,找的会也就会变得困难。


所以,在引入的第一组数据,相同类型的时候怎么去存储,最直观,最基本的,我们就按照顺序紧靠在一次,那么对于这种存储形式去存储数据的话,我们就把他叫做顺序表,顺序表就是把数据按照顺序存放,而且展示出来像表格的形式,所以叫做顺序表。上面就是顺序表以及他对应到内存中的形式,结构如下入所示。


image.pngimage.pngimage.png

相关文章
|
28天前
|
Java 数据库连接 测试技术
SpringBoot入门 - 添加内存数据库H2
SpringBoot入门 - 添加内存数据库H2
39 3
SpringBoot入门 - 添加内存数据库H2
|
1月前
|
Java 数据库连接 测试技术
SpringBoot入门(4) - 添加内存数据库H2
SpringBoot入门(4) - 添加内存数据库H2
52 4
SpringBoot入门(4) - 添加内存数据库H2
|
2月前
|
存储 索引 Python
Python散列类型(1)
【10月更文挑战第9天】
|
2月前
|
计算机视觉 Python
Python实用记录(一):如何将不同类型视频按关键帧提取并保存图片,实现图片裁剪功能
这篇文章介绍了如何使用Python和OpenCV库从不同格式的视频文件中按关键帧提取图片,并展示了图片裁剪的方法。
95 0
|
12天前
|
数据可视化 Python
以下是一些常用的图表类型及其Python代码示例,使用Matplotlib和Seaborn库。
通过这些思维导图和分析说明表,您可以更直观地理解和选择适合的数据可视化图表类型,帮助更有效地展示和分析数据。
57 8
|
2月前
|
Java 数据库连接 测试技术
SpringBoot入门(4) - 添加内存数据库H2
SpringBoot入门(4) - 添加内存数据库H2
36 2
SpringBoot入门(4) - 添加内存数据库H2
|
1月前
|
Python
在 Python 中实现各种类型的循环判断
在 Python 中实现各种类型的循环判断
34 2
|
1月前
|
Java 数据库连接 测试技术
SpringBoot入门(4) - 添加内存数据库H2
SpringBoot入门(4) - 添加内存数据库H2
68 13
|
1月前
|
Java 数据库连接 测试技术
SpringBoot入门(4) - 添加内存数据库H2
SpringBoot入门(4) - 添加内存数据库H2
47 4
|
2月前
|
存储 数据安全/隐私保护 索引

热门文章

最新文章