- 1. python内存管理机制(自动)
- 引用计数:
- 标记清除:
- 分代回收:
- 内存优化:
- 2. 对象池:每次创建对象时,都会判断池中是否具有相同对象
- 3. 函数参数
- 实际参数:调用函数时
- 形式参数:创建函数时
每个变量存储对象地址时,引用计数都会自增1,
每个变量与对象引用断开时,引用计数都会自减1。
如果引用计数为0,对象被释放。
缺点:循环引用
扫描内存,查看是否存在无法访问的内存空间。
缺点:耗时长
将内存分为"年轻代",“中年代”,“老年代”。
每代内存告急时,都会采用标记清除:将有用的数据升代。
尽少产生垃圾,对象池,手动回收(慎用)
2. 对象池:每次创建对象时,都会判断池中是否具有相同对象如果有,则直接返回该对象地址
如果没有,则开辟空间创建新对象。
优点:提高内存的利用率
位置实参:函数名(数据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条)