zoukankan      html  css  js  c++  java
  • python笔记-内存分析

    一、小整数池

    在交互模式下, 为了提高运行效率, 避免整数反复的创建和销毁而建立的小整数对象池. 定义在区间[-5, 256]之间的整数
    [-5, 256]之间的整数对象是提前创建好的, 不会被销毁. 无论在那个作用域, 都是同一个对象

    二、字符串驻留机制

    字符串驻留:仅保存一份相同且不可变字符串,不同的值被存放在字符串驻留池中
    交互模式下, 对于符合标识符规则的字符串(仅包含下划线(_)、字母和数字)会启用字符串驻留机制驻留机制

    三、变量

    在python中变量是没有类型, 只有当被赋值后变量的类型才会被隐式确定.

    所以python变量可以保存任何类型值. 其本质可以理解为c语言中的空指针(void *)

    四、对象的复制

    4.1 浅复制

    对于相互嵌套的对象的复制. 对外层对象进行复制的时候, 内层对象不会被复制. 复制出来的对象中, 内层对象与原对象的内层对象是同一个对象

    4.2 深复制

    对于相互嵌套的对象的复制. 对外层对象进行复制的时候, 内层对象也会被复制. 复制出来的对象中, 内层对象与原对象的内层对象不是同一个对象

    五、内存分区

    六、面向对象内存分析

    1. 对于一个程序中的所有类, 相同的类属性都是引用的同一个对象

    2. 类对象的实例对象初始属性

      1. 类对象的实例对象中的来自类的属性, 为发生修改时, 和类应用的时同一个对象
      2. 对于不同类对象的实例对象, 如果初始化实例的时候, 对于相同值的属性也是应用同一个对象
      class A:
          a = 10
      
          def __init__(self, name):
              self.name = name
      
      
      class B:
          a = 10
      
          def __init__(self, name):
              self.name = name
      
      
      a = A('dyp')
      b = B('dyp')
      
      print(a.a is A.a)
      print(a.a is b.a)
      print(a.name is b.name)
      

    七、垃圾回收机制

    7.1 引用计数

    python里每一个东西都是对象,它们的核心就是一个结构体:PyObject

    typedef struct_object {
         int ob_refcnt;
         struct_typeobject *ob_type;
    } PyObject;
    

    PyObject是每个对象必有的内容,其中ob_refcnt就是做为引用计数。当一个对象有新的引用时,它的ob_refcnt就会增加,当引用它的对象被删除,它的ob_refcnt就会减少。直到ob_refcnt为0时, 对象就会被销毁

  • 相关阅读:
    软考下午题具体解释---数据流图设计
    透视表提取不反复记录(4)-每一个物品的最大值
    运用python抓取博客园首页的所有数据,而且定时持续抓取新公布的内容存入mongodb中
    [经验总结]material design效果与开发总结
    cocos2d-x 3.0 回调函数
    P1334 瑞瑞的木板
    P2776 [SDOI2007]小组队列
    P1886 滑动窗口
    P1160 队列安排
    P1823 音乐会的等待
  • 原文地址:https://www.cnblogs.com/duyupeng/p/13171459.html
Copyright © 2011-2022 走看看