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 ...
随机推荐
- #elif
http://baike.sogou.com/v72031124.htm?fromTitle=%23elif #else指令用于某个#if指令之后,当前面的#if指令的条件不为真时,就编译#else后 ...
- URAL 2065 Different Sums (找规律)
题意:构造一个数列,使得它们的区间和的种类最少,其中数列中不同的数的数目不少于k. 析:我们考虑0这个特殊的数字,然后0越多,那么总和种类最少,再就是正负交替,那么增加0的数量. 代码如下: #pra ...
- 用C#调用蓝牙编程
2013-04-22 09:41:06 什么是蓝牙? 现在只能手机这么发达,蓝牙对我们来说肯定不陌生.我来介绍一下官方概念: 蓝牙,是一种支持设备短距离通信(一般10m内)的无线电技术.能在包括移动电 ...
- java线程中的wait和notify以及notifyall
一.区别与联系 1.1.wait(),notify()和notifyAll()都是java.lang.Object的方法,而确实sleep方法是Thread类中的方法,这是为什么呢? 因为wait和 ...
- C#中Action和Func的使用
在日常使用delegate时,我们通常需要显示声明一个名为XXX的委托,而在使用Action委托时,不必显示定义一个封装无参数过程的委托. 比如正常使用delegate: using System; ...
- .Net语言 APP开发平台——Smobiler学习日志:开发APP时,如何快速地实现屏幕自适应
最前面的话:Smobiler是一个在VS环境中使用.Net语言来开发APP的开发平台,也许比Xamarin更方便 一.属性介绍 设置控件在客户端屏幕可见并超出客户端屏幕时,是否自动调节高度以适应屏幕高 ...
- Sublime Text 备忘
Sublime Text已经被传成编程利器,那当然也是我们前端的利器了,刚开始用的时候,很多小问题,所以做个备忘,忘记的时候也可以翻出来看看,下次重装的时候可以用到. 1.设置自动换行 菜单栏 Vie ...
- Android播播放完SD卡指定文件夹音乐之后,自动播放下一首
最近做一个项目,需要连续播放音乐,播放完一首歌之后,自动播放完下一首歌.不要重复播放. 代码如下: package com.example.asyncplayer_ex; import java.io ...
- Crouton
https://github.com/keyboardsurfer/Crouton https://github.com/GBouerat/Crouton https://github.com/ouy ...
- [AngularJS] Isolate State Mutations in Angular Components
Managing state is one of the hardest things to do in any application. Angular 2 tackles this problem ...