0


探秘python内存机制之指针

先举两个例子

好了,欣赏完了这两道简单的小题目,想必大家心中都已经有了自己的答案了 。

那就让我们直接进入正题吧!

核心部分:

指针:

  •    *指针是python中一个无处不在,但又若隐若现的概念。
    
      为什么这么说呢?因为从狭义的指针类型来讲,python并不像C、C++之类的语言一样有明确的指针类型变量。但从广义的指针功能来讲,python却无时无刻不在使用着指针,python的一切变量赋值、变量值传递、变量值变换等等都与指针有着千丝万缕的联系,两者密不可分。
    

内存法则**:

    下面是我所总结归纳的部分关于python内存机制的法则,鄙人能力有限,想必有所遗漏,还望海涵。

1 .python采用基于值的内存管理方式。 相同的值在内存中只有一份。

            这是很多python相关书籍中都会提到的一句话,可谓是教科书式的原理。但是这句话究竟是什么意思呢?这句话说的是,从python的视角看一个变量,看到的并不是变量本身,而是变量它所对应的值,或者说是值的内存地址。总之,变量只是一个外壳,而它所对应的值(的内存地址)才是实质。由于相同的值在内存中只有一份,独一无二,所以值才是变量的一个”身份证“,可以真正判断两个变量的关系,而不同的变量名很可能只是类似于一个人的多个名字(笔名、化名、曾用名……)而已。

2.python中变量实质可以理解为指针

            常言道:python中一切皆对象。那么,现在我要说的是——python中一切变量皆指针。

            为什么这么说呢?因为正如第一条所说,变量只是一个外壳,那么这个外壳所发挥的作用就是指针。它负责了变量之间的区分与联系。对于不同的变量,它们会开辟并指向不同的内存空间,以此明确割断两者的联系;而对于实质上相同的变量,它们将通过指向同一块内存空间以实现两者的完全同步。

3.所有变量都对应一块内存

            明白了什么的两个法则,这个就很好理解。一个变量若是不指向如何内存,那它就是没有实质的,根本就没有意义。当然了,就像一个人可以拥有很多不同的名字一样,两者的映射关系为 集合A(变量)--> 集合B(内存)。多个变量可以对应同一块内存,那么这些变量就是实质相同的变量,但一个变量显然不可能对应多块内存,否则这将会多么混乱,天知道你调用这个变量时真正调用的是哪块内存。

4.定义变量将开辟新内存

           通过指针传递产生的变量一定与原变量实质相同,而通过定义产生的往往是新的变量,哪怕它们看上去是完全相同的。定义的方法有很多,赋值(如a=1.0)只是最常见的一种形式。其实,像  def 、class 、import 、索引、切片都是一种定义。

            这(定义 or 传递)将作为我们判断变量关系的重要依据。

现在来看看结果:

再来看几个:

下面是几个例外——小整数和字符串驻留机制。

    小整数是指在[-5,256]区间内的整数。由于这些整数使用极为频繁,且python内部初始化时也常常要引用它们,所以为了节约内存,python的内存池统一为这些整数分配了固定内存,所有引用他们的变量都指向这些内存,即便是定义也不再重新分配。

     字符串驻留机制也是出于类似原因,只要变量内容相同便视为实质相同,不再有存储地址的区分。能触发驻留机制的字符串有一定规定,这规定基本类似于合法变量名的规定,至于长度的规定在不同的编译环境中有所不同,这个视情况而定。

总结:

    最后,我们可以发现,变量关系的判断无非就是依据两个东西:

            定义 or 传递

    例外也只有两个:

            小整数 and 字符串驻留

     其实,费尽千辛万苦来探求这些东西,为的无非就是一个简洁的原理,而不是书上那些繁琐的话语。因为,我相信,这个世界的一切,在底层,都是简洁的,满目琳琅,最终都必将是殊途同归!

    ***统一,才是亘古不变的真理。***

最后再来挑战一下:

答案:

[1]
[2]
[0,1]
[2,3]
    **若有疑问或异议,请在评论区留言,我一定尽快回复。 **

     **谨以此篇献给广大有需求的读者们。感谢各位读者的支持,希望能对你们有所帮助,这将是我最大的荣耀与动力。若有错误,欢迎大佬指出,小编当及时更正,有幸承蒙醍醐灌顶之教,鄙人不胜感激之至。**

** 若喜欢,请点赞or收藏,谢谢!**

更多博文欢迎访问我的CSDN主页https://blog.csdn.net/Forever_Sirius?type=blog


本文转载自: https://blog.csdn.net/Forever_Sirius/article/details/122921817
版权归原作者 Forever_Sirius 所有, 如有侵权,请联系我们删除。

“探秘python内存机制之指针”的评论:

还没有评论