Skip to main content

moregeek program

技术分享:Python如何进行内存管理?-多极客编程

  Python中主要通过引用计数和内存池机制进行内存管理。下面,小千详细来说说这两种方法。

技术分享:Python如何进行内存管理?_Python

  一、引用计数机制

  Python内部使用引用计数(记录对象有多少个引用)来保持追踪内存中的对象,当对象被创建时,该对象的引用计数加1;当对象被销毁时,该对象的引用计数变为0,它会被当做垃圾进行回收。

  引用计数增加的情况:

  (1)对象被创建,如x=4。

  (2)赋值给其它变量,如y=x。

  (3)被作为参数传递给函数,如foo(x)。

  (4)作为容器对象的一个元素,如a=[1,x,'33']。

  引用计数减少的情况:

  (1)对象的引用离开它的作用域,比如, foo(x)函数执行结束时,x引用的对象引用计数减1。

  (2)对象的引用被显式地销毁,如del x或del y。

  (3)对象的别名被赋值给其他对象,x=789。

  (4)对象从窗口对象中被移除,a.remove(x)。

  垃圾回收:

  (1)垃圾收集器会回收引用计数为0的对象,并清除这些对象占用的内存空间。

  (2)当两个对象相互引用时,若它们没有被其它引用所持有,则会被垃圾收集器回收。

  (3)垃圾回收机制还有一个循环垃圾回收器,它可以确保释放循环引用对象(a引用b, b引用a)。

  二、内存池机制

  在Python中,很多时候申请的内存都是小块内存,这些小块内存在申请不久后又会被释放,这就意味着程序在运行期间会大量地执行申请和释放操作,影响Python的执行效率。为了加快Python的执行效率,Python引入了一个内存池机制,用于管理对小块内存的申请和释放。

  Python中所有小于256个字节的对象都使用内存池的分配器。另外,一些Python对象,如整数、浮点数或列表,都拥有独立的内存池,对象之间不会共享这些独立的内存池。也就是说,若分配又释放了大量的整数,用于缓存这些整数的内存池将不再分配给浮点数。

本文来自千锋教育,转载请注明出处。

©著作权归作者所有:来自51CTO博客作者戏精程序媛的原创作品,如需转载,请注明出处,否则将追究法律责任
技术分享:Python如何进行内存管理?
https://blog.51cto.com/u_15128702/2676985

30 个Python代码实现的常用功能,精心整理版-多极客编程

菜鸟学Python 2020-09-30源 / python     文 /艾里艾兰1、冒泡排序2、计算x的n次方的方法3、计算a*a + b*b + c*c + ……4、计算阶乘 n!5、列出当前目录下的所有文件和目录名6、把一个list中所有的字符串变成小写:7、输出某个路径下的所有文件和文件夹的路径8、输出某个路径及其子目录下的所有文件路径9、输出某个路径及其子目录下所有以.html为后缀的

手把手教你使用Python打造一个智能搜索淘宝商品,生成操作日志的系统-多极客编程

菜鸟学Python 2020-09-30以下文章来源于Python爬虫与数据挖掘 ,作者Python进阶者Python爬虫与数据挖掘人生苦短,我用Python。该公众号专注于分享Python网络爬虫、数据挖掘、数据分析、数据处理、数据可视化、自动化测试、运维、大数据、人工智能、云计算、机器学习等工具资源、热点资讯、相关技术文章、学习视频和学习资料等,期待您的加入~~~点击上方“菜鸟学Python”

卧槽!没想到,用Python竟能做五仁月饼-多极客编程

菜鸟大叔 菜鸟学Python 2020-09-29点击上方“菜鸟学Python”,选择“星标”公众号超级无敌干货第一时间推给你!!!再过几天就是八月十五了,又迎来了一年一度的中秋节。在我国大部分地区,中秋节是仅次于春节的传统节日、象征着团圆安康。在这天,天上的月亮会格外的圆,我们吃到嘴里的月饼也比平常要甜。月饼的种类很多,但最经典的应该还得是五仁月饼。身为程序猿,小编打算用Python 做个五仁月

什么是整型类型?Python整型详细介绍-多极客编程

  整数类型(int)简称整型,它用于表示整数,例如,100、2016等。整型字面值的表示方式有四种,分别是十进制、二进制(以“0B”或“0b”开头)、八进制(以数字“0”开头)和十六进制(以“0x”或“0X”开头)。  Python的整型可以表示的范围是有限的,它和系统的最大整型一致,例如,32位计算机上的整型是32位,可以表示的数的范围是−231~231−1。在64位计算机上的整型是64位的,

python数据库编程基础-多极客编程

1.前期准备 1.1.数据库建库 create database py_test DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; 1.2.数据库建表 create table py_test ( id int primary key auto_increment, name varchar(50) not null, age int(10)

Python适合开发桌面软件吗?很多人都不懂!-多极客编程

  提及万能编程语言,很多人都会想到python,也知道python除了很少的事情不能做之外,几乎就是万能的,那么python适合开发桌面软件吗?  可以开发,但是不适合。其实python、Java、PHP都不适合来进行桌面软件开发。虽然python本身不擅长做桌面软件开发,但是python跟C++融合的非常好,而C++非常适合进行,而python和C++之间有很好的联系。  PyQt,QT是目前

内存管理-虚拟内存-多极客编程

虚拟内存每个进程都有4GB的虚拟内存运行空间内存分页的概念:操作系统管理内存是将内存分成一页一页来管理,每一页的大小是4K,也就是0x1000,4G的内存共有1M页使用了分页机制之后,4G的地址空间被分成了固定大小的页,每一页或者被映射到物理内存,或者被映射到硬盘上的交换文件中,或者没有映射任何东西。对于一般程序来说,4G的地址空间,只有一小部分映射了物理内存,大片大片的部分是没有映射任何东西。C

Python---内存管理-多极客编程

语言的内存管理是语言设计的一个重要方面。它是决定语言性能的重要因素。无论是C语言的手工管理,还是Java的垃圾回收,都成为语言最重要的特征。这里以Python语言为例子,说明一门动态类型的、面向对象的语言的内存管理方式。对象的内存使用赋值语句是语言最常见的功能了。但即使是最简单的赋值语句,也可以很有内涵。Pythona = 1整数1为一个对象。而a是一个引用。利用赋值语句,引用a指向对象1。Pyt

请问什么时候对象分配会不在 TLAB 内分配-多极客编程

Java 对象分配流程 我们这里不考虑栈上分配,这些会在 JIT 的章节详细分析,我们这里考虑的是无法栈上分配需要共享的对象。 对于 HotSpot JVM 实现,所有的 GC 算法的实现都是一种对于堆内存的管理,也就是都实现了一种堆的抽象,它们都实现了接口 CollectedHeap。当分配一个对象堆内存空间时,在 CollectedHeap 上首先都会检查是否启用了 TLAB,如果启用了,则

DolphinDB内存管理详解-多极客编程

DolphinDB是一款支持多用户多任务并发操作的高性能分布式时序数据库软件(distributed time-series database)。针对大数据的高效的内存管理是其性能优异的原因之一。本教程涉及的内存管理包括以下方面:变量的内存管理:为用户提供与回收编程环境所需内存。分布式表的缓存管理:多个session共享分区表数据,以提高内存使用率。流数据缓存:流数据发送节点提供持久化和发送队列缓

C语言内存管理-多极客编程

在 C 语言中,当一个程序被加载到内存中运行,系统会为该程序分配一块独立的内存空间,并且这块内存空间又可以再被细分为很多区域,比如:栈区、堆区、静态区、全局区......等。这里只介绍常用的内存区域:栈区、堆区。(一) 栈区与堆区栈区:保存局部变量。存储在栈区的变量,在函数执行结束后,会被系统自动释放。堆区:由 malloc、calloc、realloc……等函数分配内存。其生命周期由 free

iOS底层原理(八)内存管理(上)-多极客编程

iOS底层原理(八)内存管理(上) iOS程序的内存布局 iOS程序的内存布局顺序如以下所示 我们可以通过打印内存地址来验证 int a = 10; int b; int main(int argc, char * argv[]) {     @autoreleasepool {         static int c = 20;                  static int d;