python和java一样,都是面向对象的语言。高级语言比如java、C#等都采用了垃圾回收机制自动管理内存使用,C、C++等语言需要用户自己分配、释放内存。自己管理内存的优点是灵活、可以任意申请内存,但是缺点就是可能会造成内存泄漏。
python的存储机制
- python是面向对象原因,python的存储问题就是对象的存储问题。对于每个对象, python会分配一块内存空间去存储;
- 对于整数和短小的字符串,python会执行缓存机制,赋值给其他对象,只是新增该对象的引用;
- 容器对象,比如列表、元组、字典等类型,仅仅是其他对象的地址引用。
python内存管理机制
python解释器内核采用内存池方式管理物理内存,创建新对象时,解释器在预先申请的物理内存块上分配响应的空间给的对象使用,可以避免频繁的分配和释放物理内存。
python作为一种解释型语言,在赋值时解释器会根据语法和右侧的操作数来决定新对象的类型。在对象创建后,该对象的应用会被赋值给左边的变量。
a = 1
b = a
# 此时,ab指向同一对象的地址
id(a) = id(b)=94147440556736
a = 3
#id(a)产生变化,id(b)仍然指向原来的内存空间
python引用计数
python通过引用计数判断变量是否进行垃圾回收。当变量的引用计数为0时,该变量可进行回收。