'''
对象池:
1、数值类型
小整数池:
[-5:256]
程序开始时,一次性加载到内存
LEGB(局部变量 闭包 全局变量 内建函数)
全局只有一个
id
is
大整数池:
每创建一个不是小整数池的变量,自动存储到大整数池中
2、字符串:
intern机制
每个单词(字符串),不夹杂空格或其他符号,默认开启intern机制
垃圾回收机制 GC机制
python采用的是引用计数机制为主,标记-清除和分代收集两种机制为辅的策略
1、如何获取一个对象的引用计数
'''
'''
import sys
class aa():
# 初始化方法
def __init__(self):
print("创建对象init")
# super(self).__init__()
#创建对象开辟对象时调用
def __new__(cls, *args, **kwargs):
print("开辟内存空间")
return super(aa, cls).__new__(cls)
#对象被系统回收之前,会调用该方法
def __del__(self):
print("%s say goodbye!"%hex(id(self)))
def test1(aaa):
print(aaa)
print("a的引用计数为:",sys.getrefcount(a))
a = aa()
print("a的引用计数为:",sys.getrefcount(a))
b = a
print("a的引用计数为:",sys.getrefcount(a))
c = [a]
print("a的引用计数为:",sys.getrefcount(a))
test1(a)
c.remove(a)
b =12
print("a的引用计数为:",sys.getrefcount(a))
del a
print("-"*20+"程序结束"+"-"*20)
'''
'''
由于引用计数解决不了循环引用的问题,因此,产生隔代回收机制
'''
import gc
import time
class AA:
#开辟新内存空间
def __new__(cls, *args, **kwargs):
print("开辟新内存空间")
return super(AA,cls).__new__(cls)
def __init__(self):
print("object born at %s"%hex(id(self)))
def __del__(self):
print("%s 被系统回收!" % hex(id(self)))
def start():
while True:
a = AA()
b = AA()
a.vv = b
b.vv = a
del a
del b
print(gc.get_threshold())
print(gc.get_count())
time.sleep(0.1)
#手动关闭垃圾回收机制
# gc.disable()
gc.set_threshold(200,10,10)
start()