关于python本身的内存管理

简介:

一、在python中,变量和内存管理的特点

1、变量无需事先声明

2、变量无需指定类型

3、程序员不用关心内存的管理问题

4、变量名会被回收

5、del语句能够直接释放资源


二、内存分配问题

在为变量分配内存的时候,其实实在借用系统资源,那么在用完以后,就会释放借用过来的系统资源。那么,这个工作是谁来完成?那么就是python解释器,我们无需关心内存的分配问题。大家懂的!


三、python是如何处理内存中的对象

3.1、引用计数怎么增加?

地球人都知道,python中,一切都是对象。

小栗子:

x = 89

y = x

解析:

1、创建里一个整型对象,整型对象是啥?那就是89,这个对象并将其(引用)或者说赋值给x,这时候,该对象的引用计数被设置为1

2、再看语句y = x,事实上并没有创建新的对象y,也就是说y不是新的对象,y算是一个别名,也指向了对象89,也就意味着对象89又被引用了一次,所以,该对象的引用计数又增加了1。这时候就变成里2。

3、OK,看到这里,应该大概明白了,python如果要保持追踪内存中的对象,那么使用的计数就叫做:“引用计数”,也就是说在python内部记录着所有使用中的对象各有多少引用。

3.2、内存回收之引用计数减少

1、一个对象被销毁,那么引用计数就会自动减少1,这很好理解。那么,当然这些事情是python解释器完成的,无需人工干预。

小栗子:

x = 23

y = x

x = 45

解析:

整型对象23被创建,并赋值给X,这时候引用计数增1,那么,创建空一个别名y,且x赋值给里y,也可说说是y引用了x,这时候引用计数又自动增1,接着,x = 45,那么也就是说,对象23被销毁了,那么引用计数自动减1,那么x又重新变为了1。如果用del直接删除一个变量,那么也相当于销毁了一个对象,引用计数也会自动减1


四、关于垃圾收集,并回收内存

一句话概括吧,不会被用到内存就会被释放,那么怎样才能知道哪些内存是可回收的呢?那么就是通过垃圾收集器来寻找引用计数为0的对象。垃圾收集器是什么鬼?它是一段独立的代码,也就是python内部的玩意。



本文转自 TtrToby 51CTO博客,原文链接:http://blog.51cto.com/freshair/1866081

相关文章
|
1月前
|
监控 算法 Java
如何确保Python的内存管理机制能够有效地工作?
【2月更文挑战第19天】【2月更文挑战第57篇】如何确保Python的内存管理机制能够有效地工作?
|
1月前
|
存储 Java Python
谈谈你对 Python 的内存管理机制的理解。
【2月更文挑战第19天】【2月更文挑战第55篇】谈谈你对 Python 的内存管理机制的理解。
|
2月前
|
缓存 监控 Python
在Python中,如何检测和处理内存泄漏?
【2月更文挑战第7天】【2月更文挑战第18篇】在Python中,如何检测和处理内存泄漏?
|
2月前
|
缓存 Python
给我一些具体的例子,说明如何在Python中使用缓存和释放来避免内存溢出。
给我一些具体的例子,说明如何在Python中使用缓存和释放来避免内存溢出。
14 0
|
2月前
|
数据采集 存储 分布式计算
如何在Python中处理大规模数据集,以避免内存溢出?
如何在Python中处理大规模数据集,以避免内存溢出?
25 1
|
2月前
|
Python
什么是Python中的内存池(Memory Pool)?
什么是Python中的内存池(Memory Pool)?
34 0
|
2月前
|
数据库 数据库管理 Python
解释Python中的内存视图(Memory View)。
解释Python中的内存视图(Memory View)。
|
3月前
|
存储 数据可视化 C++
提高代码效率的6个Python内存优化技巧
当项目变得越来越大时,有效地管理计算资源是一个不可避免的需求。Python与C或c++等低级语言相比,似乎不够节省内存。 但是其实有许多方法可以显著优化Python程序的内存使用,这些方法可能在实际应用中并没有人注意,所以本文将重点介绍Python的内置机制,掌握它们将大大提高Python编程技能。
95 0
|
2月前
|
监控 Python
推荐一些Python的内存分析工具。
【2月更文挑战第7天】【2月更文挑战第19篇】推荐一些Python的内存分析工具。
|
24天前
|
存储 监控 异构计算
【Python】GPU内存监控脚本
【Python】GPU内存监控脚本