zoukankan      html  css  js  c++  java
  • Python内存解析浅学

    1.内存管理

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

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

     

    内存分配

    如定义:

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

    1.引用计数器

     

    Xy引用的是同一个对象,都为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,当增加了别名(应该也可以成为赋值),引用就变成了2Y的引用就为2),不过当x被重新赋值2x对应的引用计数就减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

    [[...]]

     

  • 相关阅读:
    Beginning iOS 8 Programming with Swift-TableView
    the-swift-programming-language 学习笔记
    Sharepoint 查阅项字段和计算值字段的定义
    java
    【转载】大型网站架构系列:消息队列(二)
    【转载】大型网站架构系列:分布式消息队列(一)
    【转载】高并发的核心技术-幂等的实现方案
    win2003 64位系统下ODBC连接使用
    PL/SQL Developer连接本地Oracle 11g 64位数据库
    Repeater 创建复杂表头的表格
  • 原文地址:https://www.cnblogs.com/chongyou/p/5986024.html
Copyright © 2011-2022 走看看