27.内存管理

1.赋值语句的内存分析
id(value)#查看value的内存地址

==判断值相等
a is b 判断地址相等

def extend_list(val,l=[]):
      l.append(val)
      return l
list1 = extend_list(10)
list2 = extend_list(123,[])
list3 = extend_list('a')
#list1和list3所返回的列表是同一个!,list2是另外一个
2.python内存管理机制

1.引用计数(reference count)(对对象而言从0开始计数)

import sys
l = []
print(sys.getrefcount(l))
#结果是2 因为执行函数的时候,l也被引用了一次
del l #删除引用

2.垃圾回收
满足特定条件,自动启动垃圾回收
当python运行时,会记录其中分配对象(object allocation)和取消分配对(object deallocation)的次数
当两者的差值高于某个阈值时,垃圾回收才会启动
查看阈值 gc.get_threshold()
3.分代回收
python将所有的对象分为0,1,2三代
所有新建的对象都是0代对象
当某一代对象经历过垃圾回收,依然存活,那么它就被归入下一代对象
4.手动进行垃圾回收

import sys,gc
import objgraph

class Person(object):
    pass

class Cat(object):
    pass

p = Person()

c = Cat()

p.name = 'susan'
p.pet = c
c.master = p
print(sys.getrefcount(p))
print(sys.getrefcount(c))
del p
del c
p1=Person()
gc.collect()#进行垃圾回收
print(objgraph.count('Person'))
print(objgraph.count('Cat'))
'''
打印结果
3
3
2
1
'''
3.python3的内存管理机制---Pymalloc

针对小对象(<=512bytes),pymalloc会在内存池中申请内存空间
当>512bytes,则会PyMem_RawMalloc()和PyMem_RawRealloc()来申请新的内存空间

你可能感兴趣的:(27.内存管理)