一、变量与对象

关系图如下:

1、变量:通过变量指针引用对象

  变量指针指向具体对象的内存空间,取对象的值。

2、对象:类型已知,每个对象都包含一个头部信息(头部信息:类型标识符引用计数器

注意:

  变量名没有类型,类型属于对象(因为变量引用对象,所以类型随对象),变量引用什么类型的对象,变量就是什么类型的。

eg:

在Python37解释器中:

In [32]: var1=object
In [33]: var2=var1 In [34]: id(var1)
Out[34]: 139697863383968 In [35]: id(var2)
Out[35]: 139697863383968

在JetBrain中:

var1 = object
var2 = var1 print(id(var1))
print(id(var2))

输出:

PS:id()是python的内置函数,用于返回对象的身份,即对象的内存地址

在内存中:

示例1:

示例2:

示例3:
In [39]: a=123
In [40]: b=a In [41]: id(a)
Out[41]: 23242832 In [42]: id(b)
Out[42]: 23242832 In [43]: a=456 In [44]: id(a)
Out[44]: 33166408 In [45]: id(b)
Out[45]: 23242832

3、引用所指判断

  通过  is  进行引用所指判断,is是用来判断两个引用所指的对象是否相同。

示例:

整数:

In [46]: a=1
In [47]: b=1
In [48]: print(a is b)
True

短字符串:

In [49]: c="good"
In [50]: d="good"
In [51]: print(c is d)
True

长字符串:

In [52]: e="very good"
In [53]: f="very good"
In [54]: print(e is f)
False

列表:

In [55]: g=[]
In [56]: h=[]
In [57]: print(g is h)
False

由运行结果可知:

  1、Python缓存了整数短字符串,因此每个对象在内存中只存有一份,引用所指对象就是相同的,即使使用赋值语句,也只是创造新的引用(在内存的栈区内创建新的内存空间),而不是对象本身(对象依然存在于堆区),id相同

  2、Python没有缓存长字符串列表及其他对象,即使由多个相同的对象,可以使用赋值语句创建出新的对象,id不同

查看id()的源码:

def id(* args,** kwargs):#真正的签名未知
“””
返回对象的标识。 这保证在同时存在的对象中是唯一的。
(CPython使用对象的内存地址。)
“””
通过

在 Java中获取对象的内存地址方法 如下:

 二、内存池

Python中有分为大内存和小内存:(256K为界限分大小内存)

1、大内存使用malloc进行分配

2、小内存使用内存池进行分配

3、Python的内存池(金字塔)

  第3层:最上层,用户对Python对象的直接操作

  第1层和第2层:内存池,有Python的接口函数PyMem_Malloc实现-----若请求分配的内存在1~256字节之间就使用内存池管理系统进行分配,调用malloc函数分配内存,但是每次只会分配一块大小为256K的大块内存,不会调用free函数释放内存,将该内存块留在内存池中以便下次使用。

  第0层:大内存-----若请求分配的内存大于256K,malloc函数分配内存,free函数释放内存。

  第-1-2层:操作系统进行操作

借鉴:https://www.cnblogs.com/geaozhang/p/7111961.html

PythonStudy——内存管理机制 Memory management mechanism的更多相关文章

  1. PythonStudy——Python 内存池机制 (Memory pool mechanism) Pymalloc

    Python是如何进行内存管理-内存池机制 Pymalloc Python引用了一个内存池(memory pool)机制,即Pymalloc机制(malloc:n.分配内存),用于对小块内存的申请和释 ...

  2. Android内存管理机制之一:low memory killer

    转载自http://www.miui.com/thread-29268-1-1.html 准备写这个专题之前,心里是有点忐忑的.首先Android内存管理机制相当复杂,想要讲清楚比较困难:其次对于绝大 ...

  3. 深入了解C#系列:谈谈C#中垃圾回收与内存管理机制

    今天抽空来讨论一下.Net的垃圾回收与内存管理机制,也算是完成上个<WCF分布式开发必备知识>系列后的一次休息吧.以前被别人面试的时候问过我GC工作原理的问题,我现在面试新人的时候偶尔也会 ...

  4. python的内存管理机制

    先从较浅的层面来说,Python的内存管理机制可以从三个方面来讲 (1)垃圾回收 (2)引用计数 (3)内存池机制 一.垃圾回收: python不像C++,Java等语言一样,他们可以不用事先声明变量 ...

  5. C#中垃圾回收与内存管理机制

    今天抽空来讨论一下.Net的垃圾回收与内存管理机制,也算是完成上个<WCF分布式开发必备知识>系列后的一次休息吧.以前被别人面试的时候问过我GC工作原理的问题,我现在面试新人的时候偶尔也会 ...

  6. Thermostat:双层存储结构的透明巨页内存管理机制

    这是一篇由密歇根大学的Neha Agarwal 和 Thomas F. Wenisch,发表在计算机系统顶会ASLOS的论文,Thermostat: Application-transparent P ...

  7. 【JVM】5、JVM内存管理机制

    转自:http://blog.csdn.net/lengyuhong/article/details/5953544 近期看了看Java内存泄露的一些案例,跟原来的几个哥们讨论了一下,深入研究发现JV ...

  8. Linux中的Buffer Cache和Page Cache echo 3 > /proc/sys/vm/drop_caches Slab内存管理机制 SLUB内存管理机制

    Linux中的Buffer Cache和Page Cache echo 3 > /proc/sys/vm/drop_caches   Slab内存管理机制 SLUB内存管理机制 http://w ...

  9. Python 源码剖析(六)【内存管理机制】

    六.内存管理机制 1.内存管理架构 2.小块空间的内存池 3.循环引用的垃圾收集 4.python中的垃圾收集 1.内存管理架构 Python内存管理机制有两套实现,由编译符号PYMALLOC_DEB ...

随机推荐

  1. 一键清空Form表单数据

    今天在工作项目调试bug当中,遇到这样的需求:页面上的数据太多,一个一个清空太繁琐,所以就采用全部清空的写法: $(':input','#myform').not(':button, :submit, ...

  2. 二: drf视图

    Django REST framwork 提供的视图的主要作用: 控制序列化器的执行(检验.保存.转换数据) 控制数据库查询的执行 一:请求与响应 1:request Request 1 REST f ...

  3. 机器学习之 XGBoost和LightGBM

    目录 1.基本知识点简介 2.梯度提升树GBDT算法 2.1 思路和原理 2.2 梯度代替残差建立CART回归树 3.XGBoost提升树算法 3.1 XGBoost原理 3.2 XGBoost中损失 ...

  4. 原生JS获取DOM 节点到浏览器顶部的距离或者左侧的距离

    关于js获取dom 节点到浏览器顶/左部的距离,Jquery里面有封装好的offset().top/offset().left,只到父级的顶/左部距离position().top/position() ...

  5. @ControllerAdvice + @ExceptionHandler 全局处理 Controller 层异常

    @ControllerAdvice 和 @ExceptionHandler 的区别 ExceptionHandler, 方法注解, 作用于 Controller 级别. ExceptionHandle ...

  6. EBS 请求输出Html报表集成Echarts

    百度开源的ECharts有样式丰富且美观的报表类型可供选用,可以将其集成至EBS请求输出的Html报表中,这其实就是一个生成Html数据的过程. 定义输出类型为HTML的请求我就不在此处赘述.   我 ...

  7. 批量注册当前文件夹中的dll和ocx

    新建文件:RegisterDllAndOcx.bat如下 @echo offecho hello,girl~~for %%i in (*.dll *.ocx) do (echo %% register ...

  8. day12_python_1124

    00 如何学习python 如何学好英语? 母系英语. 听 说 读 写 练 input output 听 说 读 写(练) 听,读 说 纠正 01 昨日内容回顾 生成器:本质就是迭代器,自己用pyth ...

  9. tensorFlow(二)线性回归

    需要TensorFlow基础,见TensorFlow(一) 原理默认了解不赘述 实例: 模型创建: #!/usr/bin/python # -*- coding: utf-8 -* import te ...

  10. 【转载】Java Restful API 文档生成工具 smart-doc

    谁说生成api文档就必须要定义注解? 谁说生成接口请求和返回示例必须要在线? 用代码去探路,不断尝试更多文档交付的可能性. 如果代码有生命,为什么不换种方式和它对话! 一.背景 没有背景.就自己做自己 ...