python高级进阶_9_垃圾回收之小数整数池,大整数池,intern 机制01

之前我还在考虑,这个垃圾回收有没有必要写, 但是想想在性能测试的时候,经常遇到垃圾回收的东西,内存泄漏什么的,

如果你不懂垃圾回收,可能后边做性能测试就有点难了, 在开发的时候你不懂也没有关系,不影响你写代码,

小数整数池

为什么 称为池子呢, 池子在python 经常会遇到, 以后我们也会说进程池,线程池。

  1. 池子可以理解为 里面已经有存储的东西,你直接拿来用就行了, 如果池子没有东西 ,你就添加, 下次要用直接用,不要再次创建了。

  2. 这个池子 只是存储这一类的,其他不要你进来,达到了数据隔离。

咱们看下这边的代码

print(id(100))   #  直接取 100 的地址
a=100      # 创建一个 对象 a
b=100     # 创建一个对象b
print(id(a))   # 打印a 的地址 
print(id(b))  # 打印b的地址 

通过以上的代码 可以了解到, 100 无论你如何创建 都是 同一个地址,

所以 小数整数池 的意思 系统已经为你准备好了 【-5,257)范围内 所有整数, 不需要直接创建 ,拿来直接用,

有的小伙伴该说了,为什么要这么做?

答: python 通过大数据统计,在开发的过程中 , 这些数据范围用的最多, 如果没有这些会导致,系统频繁的创建,回收。这样系统资源消耗很大。 所以给这些 开个特例。

大整数池

大整数池 和小整数池的区别是

  1. 大整数池是没有提前创建好,是个空池子, 需要你自己创建 ,当你创建好了 会把整数对象保存到池子里。 后边再用就不需要创建,直接就可以用。

验证代码如下:

a=100000
b=100000
print(id(a))
print(id(b))
print(a is b)

打印结果:

2082067169008
2082067169008
True

intern 机制(共享机制)

intern 机制 和大整数池 也是一样的 都是保存好对象再 取用。

但是 intern 不是常驻内存,当没有地方引用的是会被回收的。 大整数池 不会被回收。

intern机制保存的是 不可变的类型, 如果是字符串要求是只能是 字母,下划线,数字,其他的特殊字符如空格,感叹号 ,则不适用。

好处是 : 如果一个字符需要创建100个, 难道在内存需要创建100 个吗, 这样得多占内存 。 所以让你们都共享一份就行。

>>> a="abc"
>>> b="abc"
>>> a is b
True
>>> a="a_b"
>>> b="a_b"
>>> a is b
True
>>> a="a b"
>>> b="a b"
>>> a is b
False
>>>
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值