一、小整数池
在交互模式下, 为了提高运行效率, 避免整数反复的创建和销毁而建立的小整数对象池. 定义在区间[-5, 256]
之间的整数
在[-5, 256]
之间的整数对象是提前创建好的, 不会被销毁. 无论在那个作用域, 都是同一个对象
二、字符串驻留机制
字符串驻留:仅保存一份相同且不可变字符串,不同的值被存放在字符串驻留池中
交互模式下, 对于符合标识符规则的字符串(仅包含下划线(_
)、字母和数字)会启用字符串驻留机制驻留机制
三、变量
在python中变量是没有类型, 只有当被赋值后变量的类型才会被隐式确定.
所以python变量可以保存任何类型值. 其本质可以理解为c语言中的空指针(void *)
四、对象的复制
4.1 浅复制
对于相互嵌套的对象的复制. 对外层对象进行复制的时候, 内层对象不会被复制. 复制出来的对象中, 内层对象与原对象的内层对象是同一个对象
4.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时, 对象就会被销毁