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时, 对象就会被销毁

  • 相关阅读:
    知多少进程?
    提高.NET应用性能
    战术设计DDD
    win7下exe文件设置为开机启动
    CQRS项目
    DDD总览
    ML.Net Model Builder
    MySQL主主复制搭建教程收集(待实践)
    MySQL主从复制搭建教程收集(待实践)
    MySQL集群方案收集
  • 原文地址:https://www.cnblogs.com/duyupeng/p/13171459.html
Copyright © 2011-2022 走看看