Python内存管理机制(引用,回收,缓存池)

Python的内存管理机制(一)

文章目录
  • 引用机制
  • 垃圾回收
  • 缓存池
  • 深拷贝与浅拷贝
引用机制

对象是内存中的实体,对象名则为对象的引用,对象与引用是分离的,这是动态类型的核心,每一个对象都维护一个ob_ref用于记录对象被引用的次数
,使用sys模块中的getrefcount()方法可获得当前对象的引用次数。

from sys import getrefcount
a = "hello python"
print(getrefcount(a))//函数参数的传递也是利用引用
b = a
print(getrefcount(a))

>> 2
>> 3
垃圾回收

触发垃圾回收的三个条件

  1. gc.collect()
  2. GC达到阈值
  3. 程序执行结束

分代回收:存活的越久的对象越不容易被回收,经过一定次数的扫描对象可逐渐变为一代、二代。

标记删除:主要解决循环引用内存无法回收问题

a = []
b = []
a.append(b)
b.append(a)
print(a)
print(b)

>>[[[...]]]
>>[[[...]]]

将非活动对象标记为可删除

缓存机制(缓存池)

1.整数对象缓存池

a = 1
b = 1
print(id(a))
print(id(b))

140735981711616
140735981711616

2.字符串缓存
当多个引用的对象是相同的较短字符串时,引用的地址相同,也就是引用的是同一个字符串对象。

a = 'abc'
b = 'abc'
print(id(a))
print(id(b))

2153715420912
2153715420912

下节将探讨深浅拷贝…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值