对象池 (需要交互模式) (PY高级编程系列)

对象池 (需要交互模式)

小整数池

Python为了优化速度, 使用了小整数对象池, 避免为整数频繁申请和销毁内存空间
Python 对小整数的定义是 [-5, 256] ,这些整数对象是提前建立好的, 不会被垃圾回收
在一个 Python 的程序中, 无论这个整数处于LEGB (局部变量, 闭包, 全局, 内建模块) 中的哪个位置, 所有位于这个范围内的整数使用的都是同一个对象

for k, _ in enumerate(range(-5, 256+1)):
    if k % 10 == 0:
        print()
    print(str(_).zfill(3), id(_), '|', end=' ')

# id相同
a = 200
print(id(a))
b = 200
print(id(b))

大整数池

默认创建出来, 池内为空的, 创建一个就会往池中存储一个

# id不同
c = 288
print(id(c))
d = 288
print(id(d))

短字符串池 (intern机制)

每个单词(字符串), 不夹杂空格或者其他符号, 默认开启intern机制, 共享内存, 靠引用计数决定是否销毁
python中对大于256的整数, 会重新分配对象空间地址保存对象
对于字符串来说, 如果不包含空格的字符串, 则不会重新分配对象空间, 对于包含空格的字符串则会重新分配

# intern机制 id相同 <=256 256k
a = 'CY3761'
print(a, a.__sizeof__(), id(a))
b = 'CY3761'
print(b, b.__sizeof__(), id(b))

# intern机制 id不相同
c = 'CY3761 '
print(c, c.__sizeof__(), id(c))
d = 'CY3761 '
print(d, d.__sizeof__(), id(d))

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

CY3761

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

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

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

打赏作者

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

抵扣说明:

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

余额充值