Python基础回顾 垃圾回收机制

Python基础回顾 垃圾回收机制,第1张

文章目录
      • 1. python内存管理机制(自动)
        • 引用计数:
        • 标记清除:
        • 分代回收:
        • 内存优化:
      • 2. 对象池:每次创建对象时,都会判断池中是否具有相同对象
      • 3. 函数参数
        • 实际参数:调用函数时
        • 形式参数:创建函数时

1. python内存管理机制(自动) 引用计数:

每个变量存储对象地址时,引用计数都会自增1,
每个变量与对象引用断开时,引用计数都会自减1。
如果引用计数为0,对象被释放。
缺点:循环引用

标记清除:

扫描内存,查看是否存在无法访问的内存空间。
缺点:耗时长

分代回收:

将内存分为"年轻代",“中年代”,“老年代”。
每代内存告急时,都会采用标记清除:将有用的数据升代。

内存优化:

尽少产生垃圾,对象池,手动回收(慎用)

2. 对象池:每次创建对象时,都会判断池中是否具有相同对象

如果有,则直接返回该对象地址
如果没有,则开辟空间创建新对象。
优点:提高内存的利用率

3. 函数参数 实际参数:调用函数时

位置实参:函数名(数据1,数据2)
序列实参:函数名(*序列)
关键字实参:函数名(形参名1=数据1,形参名2=数据2)
字典实参:函数名(**字典)

形式参数:创建函数时

默认参数:def 函数名(形参名1=默认值,形参名2=默认值)
位置形参:def 函数名(形参名1,形参名2)
星号元组形参:def 函数名(args)
命名关键字形参:def 函数名(
,形参名1,形参名2)
def 函数名(*args,形参名1,形参名2)
双星号字典形参:def 函数名(**kwargs)

# 1.  引用计数
list01 = [1,2,3]
list02 = list01
list03 = list01
list04 = list01
# 此时列表[1,2,3]对象引用计数为4
list01 = []
# 此时列表[1,2,3]对象引用计数为3
del list02,list03
# 此时列表[1,2,3]对象引用计数为1
list04 = 0
# 此时列表[1,2,3]对象引用计数为0,列表[1,2,3]对象被释放


# str_result = ""
# for item in range(1000):
#     # ""  "0" --> 产生新对象
#     # "0"  "1" --> 产生新对象
#     # "01"  "2" --> 产生新对象
#     str_result += str(item)
# print(str_result)


str_result = []
for item in range(1000):
    # ""  "0" --> 产生新对象
    # "0"  "1" --> 产生新对象
    # "01"  "2" --> 产生新对象
    str_result.append(str(item))
print(str_result)


# 循环引用
list01 = []
list02 = []
list01.append(list02)
list02.append(list01)
del list01,list02


# 2. 对象池:每次创建对象时,都会判断池中是否具有相同对象
#           如果有,则直接返回该对象地址
#           如果没有,则开辟空间创建新对象。
#      优点:提高内存的利用率
a = ["a"]
b = ["a"]
c = ["a"]
print(id(a),id(b),id(c))

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/793697.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-06
下一篇 2022-05-06

发表评论

登录后才能评论

评论列表(0条)

保存