python的内存管理


01.python中万物皆对象,python会为每个对象分配一块内存空间用于存储。

  • python的变量与对象:
    • 变量,通过变量指针指向具体对象的内存空间,取对象的值。
      • 变量没有类型,类型属于对象;变量引用什么类型的对象,变量就是什么类型的。
    • 对象,类型已知,每个对象都包含一个头部信息,存放对象的类型标识符和引用计数器。
  • python中使用id()方法返回一个对象的内存地址,比如:
a = 100
b = 100
print(id(a))
print(id(b))

a = [1, 2, 3]
b = a
print(id(a))
print(id(b))


02.python编程中一般无需关心变量的存亡,一般也不用关心内存的管理。

  • python使用引用计数器记录所有对象的引用数:
    • 计数增加,赋值给其他变量就增加引用计数器,比如x=3;y=x的赋值语句就会增加内存中’3’对象的引用计数。
    • 计数减少:
      • 函数运行结束时,局部变量就会被自动销毁,对象引用计数减少。
      • 变量被复制给其他对象,比如x=3;y=x;x=4的赋值语句就会减少内存中’3’对象的引用计数。
  • python中,当对象引用数变为0时,该对象就可以被垃圾回收GC。
    • python的内存垃圾回收会在合适的时间自动执行,无需人工干预。
  • python中使用getrefcount()方法返回一个对象的引用计数,比如:
import sys

x = [1, 2, 3]
print(sys.getrefcount(x))
y = x
print(sys.getrefcount(x))
x = [5, 6, 7]
print(sys.getrefcount(x))
文档更新时间: 2020-03-28 20:52   作者:闻骏