CPython是否仅在对象不可变时才缓存不再引用的对象?

时间:2017-07-12 16:16:17

标签: python python-3.x

从学习Python

struct node {
    int student_id;
    int wins;
}
  

因为Python缓存并重用小整数和小字符串,   如前所述,这里的对象42可能不是字面上的   回收;相反,它可能会保留在系统表中   下次在代码中生成42时重复使用。 大多数种类   但是,对象会在不再出现时立即回收   引用;对于那些没有的,缓存机制是   与您的代码无关。

CPython在不再引用时会缓存哪些对象?

CPython在不再引用时不会缓存哪些对象?

只有当对象不可变时,CPython才会缓存不再引用的对象吗? 或者它与对象的(im)可变性无关?

感谢。

1 个答案:

答案 0 :(得分:1)

不变性是其中很重要的一部分:你不希望你的新空集成为对现有空集的引用,只是为了在没有你知道它的时候看到它更新了#34;原始&#34 ;已更新。

但是,CPython缓存的对象通常不是在程序生命周期中创建的任意对象。无论是否最终使用,都会在启动时创建小整数。 (我不知道小字符串;它们可能只在必要时创建,但从那时起缓存。)