有同学问到了一个问题,python中存储变量是通过内存地址来存储,那么python又是如何去判断内存中的地址是什么数据类型的呢。经过查找,找到这篇文章:

原博客地址:http://www.cnblogs.com/aashui/p/9871009.html

1.Python是如何进行内存管理的?

答:从三个方面来说,一对象的引用计数机制,二垃圾回收机制,三内存池机制

一、对象的引用计数机制

Python内部使用引用计数,来保持追踪内存中的对象,所有对象都有引用计数。

引用计数增加的情况:

1,一个对象分配一个新名称

2,将其放入一个容器中(如列表、元组或字典)

引用计数减少的情况:

1,使用del语句对对象别名显示的销毁

2,引用超出作用域或被重新赋值

sys.getrefcount( )函数可以获得对象的当前引用计数

多数情况下,引用计数比你猜测得要大得多。对于不可变数据(如数字和字符串),解释器会在程序的不同部分共享内存,以便节约内存。

二、垃圾回收

1,当一个对象的引用计数归零时,它将被垃圾收集机制处理掉。

2,当两个对象a和b相互引用时,del语句可以减少a和b的引用计数,并销毁用于引用底层对象的名称。然而由于每个对象都包含一个对其他对象的应用,因此引用计数不会归零,对象也不会销毁。(从而导致内存泄露)。为解决这一问题,解释器会定期执行一个循环检测器,搜索不可访问对象的循环并删除它们。

三、内存池机制

Python提供了对内存的垃圾收集机制,但是它将不用的内存放到内存池而不是返回给操作系统。

1,Pymalloc机制。为了加速Python的执行效率,Python引入了一个内存池机制,用于管理对小块内存的申请和释放。

2,Python中所有小于256个字节的对象都使用pymalloc实现的分配器,而大的对象则使用系统的malloc。

3,对于Python对象,如整数,浮点数和List,都有其独立的私有内存池,对象间不共享他们的内存池。也就是说如果你分配又释放了大量的整数,用于缓存这些整数的内存就不能再分配给浮点数。

由上述可以看出,当我们创建一个整数变量如,Num_int = 1   此时必定会有一个内存地址A(假设)指向1这个数据。此时Num_Int 指向的地址也是地址A。当我们创建这个整数对象时,实际上1这个数据已经存向了我们内存中指定存放整数的地方,如下图:

也就是说,在我们创建整数变量或者其他变量时,python已经帮你找到了固定的位置,然后你将数据存进去就可以了。不管你怎么存,只是地址变了,并且你的地址如果是相同的数据类型,那么应该是有相似点的,比如  A (内存地址) = 10001  那么可能你再创建一个变量 时 B(内存地址) = 10002 。本人理解是这样,若有不对请指出,谢谢!

Python 底层原理知识

1.Python是如何进行内存管理的? 答:从三个方面来说,一对象的引用计数机制,二垃圾回收机制,三内存池机制 一.对象的引用计数机制 Python内部使用引用计数,来保持追踪内存中的对象,所有对象都 ...

操作系统底层原理与Python中socket解读

目录 操作系统底层原理 网络通信原理 网络基础架构 局域网与交换机/网络常见术语 OSI七层协议 TCP/IP五层模型讲解 Python中Socket模块解读 TCP协议和UDP协议 操作系统底层原理 ...

Python多线程原理与实现

Date: 2019-06-04 Author: Sun Python多线程原理与实战 目的: (1)了解python线程执行原理 (2)掌握多线程编程与线程同步 (3)了解线程池的使用 1 线程基本 ...

Docker底层原理介绍

1.docker介绍 1.1什么是docker Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻 ...

Android进程永生技术终极揭秘:进程被杀底层原理、APP应对技巧

1.引言 上个月在知乎上发表的由“袁辉辉”分享的关于TIM进程永生方面的文章(即时通讯网重新整理后的标题是:),短时间内 ...

Python底层socket库

Python底层socket库将Unix关于网络通信的系统调用对象化处理,是底层函数的高级封装,socket()函数返回一个套接字,它的方法实现了各种套接字系统调用.read与write与Python ...

Neo4j图数据库简介和底层原理

现实中很多数据都是用图来表达的,比如社交网络中人与人的关系.地图数据.或是基因信息等等.RDBMS并不适合表达这类数据,而且由于海量数据的存在,让其显得捉襟见肘.NoSQL数据库的兴起,很好地解决了海 ...

【T-SQL进阶】02.理解SQL查询的底层原理

本系列[T-SQL]主要是针对T-SQL的总结. [T-SQL基础]01.单表查询-几道sql查询题 [T-SQL基础]02.联接查询 [T-SQL基础]03.子查询 [T-SQL基础]04.表表达式 ...

spring框架的IOC的底层原理

1.IOC概念:spring容器创建对象并管理 2.IOC的底层原理的具体实现: 1)所使用的技术: (1). dom4j解析xml配置文件 (2).工厂设计模式(解耦合) (3).反射 第一步:配置 ...

随机推荐

实现了IEnumerable接口的GetEnumerator 即可使用 Foreach遍历,返回一个IEnumerator对象

#region 程序集 mscorlib.dll, v4.0.0.0 // C:\Program Files (x86)\Reference Assemblies\Microsoft\Framewor ...

win7自带windows media player 已停止工作

解决方法如下: 在计算机开始,菜单找到控制面板 ,然后打开程序和功能,选择打开或关闭window功能,媒体功能.再取消windows Media Center Windows MediaPlayer选 ...

R-Studio

R-Studio是一个功能强大.节省成本的反删除和数据恢复软件系列.它采用独特的数据恢复新技术,为恢复FAT12/16/32.NTFS.NTFS5(由 Windows 2000/XP/2003/Vis ...

PuTTY 信息泄露漏洞

漏洞名称: PuTTY 信息泄露漏洞 CNNVD编号: CNNVD-201308-380 发布时间: 2013-08-27 更新时间: 2013-08-27 危害等级: 低危   漏洞类型: 信息泄露 ...

IOS 推送原理

最近两天在研究ios的消息推送机制.研究这个东西,还是充满兴趣的. Push的原理: Push 的工作机制可以简单的概括为下图 图中,Provider是指某个iPhone软件的Push服务器,这篇文章 ...

简单购物车程序(Python)

#简单购物车程序:money_all=0tag=Trueshop_car=[]shop_info={'apple':10,'tesla':100000,'mac':3000,'lenovo':3000 ...

国内开源社区巨作AspectCore-Framework入门

前些天和张队(善友),lemon(浩洋),斌哥(项斌)等MVP大咖一块儿吃饭,大家聊到了lemon名下的AOP这个项目,我这小白听得一脸懵逼,后面回来做了一下功课,查了下资料,在lemon的Githu ...

TensorFlow函数:tf.reduce_sum

tf.reduce_sum 函数 reduce_sum ( input_tensor , axis = None , keep_dims = False , name = None , reducti ...

LeetCode题解:Flatten Binary Tree to Linked List:别人的递归!

总是在看完别人的代码之后,才发现自己的差距! 我的递归: 先把左侧扁平化,再把右侧扁平化. 然后找到左侧最后一个节点,把右侧移动过去. 然后把左侧整体移到右侧,左侧置为空. 很复杂吧! 如果节点很长的 ...

DPDK实例程序:testpmd

用户手册:https://doc.dpdk.org/guides/testpmd_app_ug/index.html 还不错的入门:http://syswift.com/188.html 我的运行情况 ...

python底层原理讲解_python底层原理相关推荐

  1. python 求和并排序_Python堆排序原理与实现方法详解

    本文实例讲述了Python堆排序原理与实现方法.分享给大家供大家参考,具体如下: 在这里要事先说明一下我也是新手,很多东西我了解不是很深入,写算法完全是锻炼自己逻辑能力同时顺带帮助读研的朋友么解决一些 ...

  2. python怎样实现封装_Python底层封装实现方法详解

    Python底层封装实现方法详解 这篇文章主要介绍了Python底层封装实现方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 事实上,pyth ...

  3. python封装的方法_Python封装原理与实现方法详解

    本文实例讲述了Python封装原理与实现方法.分享给大家供大家参考,具体如下: [封装] 隐藏对象的属性和实现细节,仅对外提供公共访问方式. [好处] 1. 将变化隔离: 2. 便于使用: 3. 提高 ...

  4. python爬取网页内容_Python爬虫原理解析

    笔者公众号:技术杂学铺 笔者网站:mwhitelab.com 本文将从何为爬虫.网页结构.python代码实现等方面逐步解析网络爬虫. 1. 何为爬虫 如今互联网上存储着大量的信息. 作为普通网民,我 ...

  5. python字符编码讲解_python 字符编码讲解

    ASCII控制字符  Unicode编码 ASCII(American Standard Code for Information Interchange,美国信息互换标准代码,ASCⅡ)是基于拉丁字 ...

  6. python链表值讲解_python数据结构之链表的实例讲解

    在程序中,经常需要将⼀组(通常是同为某个类型的)数据元素作为整体 管理和使⽤,需要创建这种元素组,⽤变量记录它们,传进传出函数等. ⼀组数据中包含的元素个数可能发⽣变化(可以增加或删除元素). 对于这 ...

  7. python基本内容讲解_Python命名约定基本内容解析

    在我们学习Python编码规范的过程中,其中命名约定是一个比较重要的知识点.我们需要对这方面的知识有一个充分的认知.在这里我们就会针对Python命名约定的相关内容做一个系统的讲解. Python命名 ...

  8. python封装功能讲解_python学习28——面向对象实例讲解与封装

    面向对象实例讲解 classSchool: school_name= 'OLDBOY' def __init__(self, nickname, addr): self.nickname=nickna ...

  9. python面向对象生动讲解_Python面向对象语法精讲

    本专题的内容结构: 第一部分主要是:面向对象基础 第二部分主要是:面向对象进阶 第一部分的结构: unit1:面向对象编程模式: (1),面向对象编程思想 (2),面向对象的三个特征 (3),Pyth ...

  10. python sys模块讲解_python模块之sys模块和序列化模块(实例讲解)

    sys模块 sys模块是与python解释器交互的一个接口 sys.argv 命令行参数List,第一个元素是程序本身路径 sys.exit(n) 退出程序,正常退出时exit(0),错误退出sys. ...

最新文章

  1. insertionSortList
  2. android获取状态栏截屏按钮状态,关于代码截屏带状态栏的问题
  3. 428 Setup MySQL + - 改
  4. Java (JVM) Memory Model – Memory Management in Java
  5. h5 socket.io java,从HTML5 WebSocket到Socket.io
  6. 全球与中国立式胶体磨市场发展现状调研及前景需求分析报告2022-2027年版
  7. Java集合篇:Vector
  8. erp管理系统都有哪些
  9. oracle的表空间的检查,oracle数据库检查所有表空间使用率的脚本
  10. Charles使用备注[1]
  11. 《指针的编程艺术(第二版)》一2.3 三颗星星:表示三把钥匙
  12. asp.net my sqlHelper
  13. DRAM内存原理(四)同步内存和异步内存技术
  14. 10个典型的大数据案例
  15. 【毕业季】总结过去,展望未来
  16. 2019计算机就业形势图表分析,2019毕业生就业形势分析
  17. c语言数组五种排序法:bubble,choise,quick,insert,shell 和js 数组排序sort的区别
  18. Discuz!开发之替换系统IP库为纯真IP库的方法
  19. iOS 一步步带你实践组件二进制方案
  20. 【实例学模式】一针见血装饰器模式

热门文章

  1. 大学生创新创业计划-2019
  2. 【离散数学】高级计数技术
  3. php转换ofd文件格式,一种OFD格式文档支持脚本的方法与流程
  4. 缠论入门到精通理论到实战
  5. 共轭梯度(CG)算法
  6. 万圣节html代码大全,《方舟 生存进化》万圣节代码大全一览
  7. 蓝宝石rx470d原版bios_AMD RX470/570强刷RX580完整图文教程(附文件下载及查BIOS攻略)...
  8. 中国物联网激荡20年
  9. 阿里巴巴Java开发手册(详尽PDF版).
  10. 数据仓库与数据挖掘的OLAP技术----韩家炜教授的《数据挖掘概念与技术》学习笔记