1.内存管理

首先理解变量,和内存特性

  1. 1.       Python中无须声明变量,
  2. 2.       无须指定类型
  3. 3.       不用关心内存管理
  4. 4.       变量名会被回收
  5. 5.       Del 语句能够释放资源

内存分配

如定义:

X=1    默认已经是int型,那他在内存中是怎样的

1.引用计数器

X,y引用的是同一个对象,都为1,当对象被赋值给其他变量,引用计数器就变为了2

有4种方式,会增加引用计数器

  1. 1.       创建对象

X=1

  1. 2.       别名被创建

如:赋值 y=x

  1. 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. 1.       本地引用被赋值为其他对象,如x=2
  2. 2.       对象名被销毁

使用del x ,这是引用计数就为0了

  1. 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内存解析浅学的更多相关文章

  1. Python内存管理机制-《源码解析》

    Python内存管理机制 Python 内存管理分层架构 /* An object allocator for Python. Here is an introduction to the layer ...

  2. python进阶_浅谈面向对象进阶

    python进阶_浅谈面向对象进阶 学了面向对象三大特性继承,多态,封装.今天我们看看面向对象的一些进阶内容,反射和一些类的内置函数. 一.isinstance和issubclass  class F ...

  3. Python爬虫解析网页的4种方式 值得收藏

    用Python写爬虫工具在现在是一种司空见惯的事情,每个人都希望能够写一段程序去互联网上扒一点资料下来,用于数据分析或者干点别的事情. ​ 我们知道,爬虫的原理无非是把目标网址的内容下载下来存储到内存 ...

  4. 面试官问我:如何在 Python 中解析和修改 XML

    摘要:我们经常需要解析用不同语言编写的数据.Python提供了许多库来解析或拆分用其他语言编写的数据.在此 Python XML 解析器教程中,您将学习如何使用 Python 解析 XML. 本文分享 ...

  5. 用 ElementTree 在 Python 中解析 XML

    用 ElementTree 在 Python 中解析 XML 原文: http://eli.thegreenplace.net/2012/03/15/processing-xml-in-python- ...

  6. Python XML解析(转载)

    Python XML解析 什么是XML? XML 指可扩展标记语言(eXtensible Markup Language). 你可以通过本站学习XML教程 XML 被设计用来传输和存储数据. XML是 ...

  7. python高效解析日志入库

    python脚本解析日志文件入库一般有三个重要的步骤:读文件.解析文件.入库.在这三个方面下功夫,可确保我们获得最优的性能(这里不讨论并发) 1 读文件:一次读一行,磁盘IO太多,效率低下:一次性读如 ...

  8. Python网页解析

    续上篇文章,网页抓取到手之后就是解析网页了. 在Python中解析网页的库不少,我最开始使用的是BeautifulSoup,貌似这个也是Python中最知名的HTML解析库.它主要的特点就是容错性很好 ...

  9. Python XML解析之ElementTree

    参考网址: http://www.runoob.com/python/python-xml.html https://docs.python.org/2/library/xml.etree.eleme ...

随机推荐

  1. #elif

    http://baike.sogou.com/v72031124.htm?fromTitle=%23elif #else指令用于某个#if指令之后,当前面的#if指令的条件不为真时,就编译#else后 ...

  2. URAL 2065 Different Sums (找规律)

    题意:构造一个数列,使得它们的区间和的种类最少,其中数列中不同的数的数目不少于k. 析:我们考虑0这个特殊的数字,然后0越多,那么总和种类最少,再就是正负交替,那么增加0的数量. 代码如下: #pra ...

  3. 用C#调用蓝牙编程

    2013-04-22 09:41:06 什么是蓝牙? 现在只能手机这么发达,蓝牙对我们来说肯定不陌生.我来介绍一下官方概念: 蓝牙,是一种支持设备短距离通信(一般10m内)的无线电技术.能在包括移动电 ...

  4. java线程中的wait和notify以及notifyall

    一.区别与联系 1.1.wait(),notify()和notifyAll()都是java.lang.Object的方法,而确实sleep方法是Thread类中的方法,这是为什么呢?  因为wait和 ...

  5. C#中Action和Func的使用

    在日常使用delegate时,我们通常需要显示声明一个名为XXX的委托,而在使用Action委托时,不必显示定义一个封装无参数过程的委托. 比如正常使用delegate: using System; ...

  6. .Net语言 APP开发平台——Smobiler学习日志:开发APP时,如何快速地实现屏幕自适应

    最前面的话:Smobiler是一个在VS环境中使用.Net语言来开发APP的开发平台,也许比Xamarin更方便 一.属性介绍 设置控件在客户端屏幕可见并超出客户端屏幕时,是否自动调节高度以适应屏幕高 ...

  7. Sublime Text 备忘

    Sublime Text已经被传成编程利器,那当然也是我们前端的利器了,刚开始用的时候,很多小问题,所以做个备忘,忘记的时候也可以翻出来看看,下次重装的时候可以用到. 1.设置自动换行 菜单栏 Vie ...

  8. Android播播放完SD卡指定文件夹音乐之后,自动播放下一首

    最近做一个项目,需要连续播放音乐,播放完一首歌之后,自动播放完下一首歌.不要重复播放. 代码如下: package com.example.asyncplayer_ex; import java.io ...

  9. Crouton

    https://github.com/keyboardsurfer/Crouton https://github.com/GBouerat/Crouton https://github.com/ouy ...

  10. [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 ...