Python基础回顾 垃圾回收机制

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))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蜘蛛da侠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值