Python内存解析浅学
1.内存管理
首先理解变量,和内存特性
- 1. Python中无须声明变量,
- 2. 无须指定类型
- 3. 不用关心内存管理
- 4. 变量名会被回收
- 5. Del 语句能够释放资源
内存分配
如定义:
X=1 默认已经是int型,那他在内存中是怎样的
1.引用计数器
X,y引用的是同一个对象,都为1,当对象被赋值给其他变量,引用计数器就变为了2
有4种方式,会增加引用计数器
- 1. 创建对象
X=1
- 2. 别名被创建
如:赋值 y=x
- 3. 做为参数传递给函数
参数名(x)
4.成为容器对象的一个元素
List=[x,y,’ss’]
2.减少引用
还是以上的例子:
X=1
Y=x
X=2
当对象1被创建并赋值给X,它的引用就为1,当增加了别名(应该也可以成为赋值),引用就变成了2(Y的引用就为2),不过当x被重新赋值2,x对应的引用计数就减1.
什么情况下会减少引用
- 1. 本地引用被赋值为其他对象,如x=2
- 2. 对象名被销毁
使用del x ,这是引用计数就为0了
- 3. 对象从一个窗口对象移除
函数名.Remove()
4.窗口对象被销毁
如刚举例的:List=[x,y,’ss’]
Del list
学习增加引用,和减少引用主要还是要了解他的垃圾回收
3.垃圾的回收
当引用计数器变为0时,它就被垃圾回收,这个是我比较浅淡的理解,
而他回收的过程书中描述有2种:以下文字描述提炼来自《Python核心编程》
1.它会去检查那些引用计数为0的对象,然后清除其在内存的空间。当然除了引用计数为0的会被清除,还有一种情况也会被垃圾收集器清掉:当两个对象相互引用时,他们本身其他的引用已经为0了。
2、垃圾回收机制还有一个循环垃圾回收器, 确保释放循环引用对象(a引用b, b引用a, 导致其引用计数永远不为0。
>> x = [] >>> y = [] >>> a.append(y) >>> b.append(x) >>> print a [[[...]]] >>> print b [[...]] |
Python内存解析浅学的更多相关文章
- Python内存管理机制-《源码解析》
Python内存管理机制 Python 内存管理分层架构 /* An object allocator for Python. Here is an introduction to the layer ...
- python进阶_浅谈面向对象进阶
python进阶_浅谈面向对象进阶 学了面向对象三大特性继承,多态,封装.今天我们看看面向对象的一些进阶内容,反射和一些类的内置函数. 一.isinstance和issubclass class F ...
- Python爬虫解析网页的4种方式 值得收藏
用Python写爬虫工具在现在是一种司空见惯的事情,每个人都希望能够写一段程序去互联网上扒一点资料下来,用于数据分析或者干点别的事情. 我们知道,爬虫的原理无非是把目标网址的内容下载下来存储到内存 ...
- 面试官问我:如何在 Python 中解析和修改 XML
摘要:我们经常需要解析用不同语言编写的数据.Python提供了许多库来解析或拆分用其他语言编写的数据.在此 Python XML 解析器教程中,您将学习如何使用 Python 解析 XML. 本文分享 ...
- 用 ElementTree 在 Python 中解析 XML
用 ElementTree 在 Python 中解析 XML 原文: http://eli.thegreenplace.net/2012/03/15/processing-xml-in-python- ...
- Python XML解析(转载)
Python XML解析 什么是XML? XML 指可扩展标记语言(eXtensible Markup Language). 你可以通过本站学习XML教程 XML 被设计用来传输和存储数据. XML是 ...
- python高效解析日志入库
python脚本解析日志文件入库一般有三个重要的步骤:读文件.解析文件.入库.在这三个方面下功夫,可确保我们获得最优的性能(这里不讨论并发) 1 读文件:一次读一行,磁盘IO太多,效率低下:一次性读如 ...
- Python网页解析
续上篇文章,网页抓取到手之后就是解析网页了. 在Python中解析网页的库不少,我最开始使用的是BeautifulSoup,貌似这个也是Python中最知名的HTML解析库.它主要的特点就是容错性很好 ...
- Python XML解析之ElementTree
参考网址: http://www.runoob.com/python/python-xml.html https://docs.python.org/2/library/xml.etree.eleme ...
随机推荐
- redis的使用
phpredis是php的一个扩展,效率是相当高有链表排序功能,对创建内存级的模块业务关系 很有用;以下是redis官方提供的命令使用技巧: 下载地址如下: https://github.com/ow ...
- Unity3D之Mecanim动画系统学习笔记(三):Animation View
动画组件之间的关系 我们先看一张图: 这里我们可以看到,我们在GameObject之上绑定的Animator组件是控制模型进行动画播放的. 而其属性Controller则对应一个Animator Co ...
- C#中动态加载和卸载DLL
在C++中加载和卸载DLL是一件很容易的事,LoadLibrary和FreeLibrary让你能够轻易的在程序中加载DLL,然后在任何地方卸载.在C#中我们也能使用Assembly.LoadFile实 ...
- iis 启用父目录路径访问
今天公司有个客户保修网站后台无法访问,我查看了源代码,发现ASP代码本身并没有什么问题.而且我下到本地能够访问.就是在网上不能正常连接,显示入下错误: Server.MapPath() 错误 'ASP ...
- Win7 不能安装 msi 解决办法
Win7 不能安装Setup.msi解决办法 解决方案如下: 新建一个文本文件,输入msiexec /i d:\Setup.msi (假设文件名为Setup.msi ,放在d盘根目录下,即是安装程序的 ...
- iOS 2D绘图详解(Quartz 2D)之概述
前言:最近在研究自定义控件,由于想要彻底的定制控件的视图还是要继承UIView,虽然对CALayer及其子类很熟练,但是对Quartz 2D这个强大的框架仍然概念模棱两可.于是,决定学习下,暂定7篇文 ...
- android 自定义 radiobutton 文字颜色随选中状态而改变
主要是写一个 color selector 在res/建一个文件夹取名color res/color/color_radiobutton.xml <?xml version="1.0& ...
- 使用快盘托管Git库
Dropbox非常好用.可是我如今也没弄明确究竟哪里好用了.不如试试中国的金山快盘..起码不会操心被墙. cd ~/Kuaipan/repo git --bare init //初始化仓库 cd ~/ ...
- ios--uitextfield动态限制输入的字数(解决方式)
1.定义一个事件: -(IBAction)limitLength:(UITextField *)sender { bool isChinese;//推断当前输入法是否是中文 if ([[[UIText ...
- Arrays.sort(new String[]{"aaa"}); 排序方法
private static void mergeSort(Object[] src, Object[] dest, int low, int high, int off) { int length ...