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

Posted 大数据小禅

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python入门到精通理解python中的内存·类型本质·以及连续储存以及顺链表的概念相关的知识,希望对你有一定的参考价值。

🚀 作者 :“大数据小禅”

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

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

目录

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

内存·本质·连续储存:

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

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

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

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

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


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

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

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

以上是关于python入门到精通理解python中的内存·类型本质·以及连续储存以及顺链表的概念的主要内容,如果未能解决你的问题,请参考以下文章

python入门到精通python中的枚举类

python入门到精通python中的枚举类

Python入门到精通精品第九章 - 类

Python基础知识详解 从入门到精通类与对象

python入门到精通一文让你彻底搞懂python的函数

python入门到精通一文让你彻底搞懂python的函数