从学习Python
struct node {
int student_id;
int wins;
}
因为Python缓存并重用小整数和小字符串, 如前所述,这里的对象42可能不是字面上的 回收;相反,它可能会保留在系统表中 下次在代码中生成42时重复使用。 大多数种类 但是,对象会在不再出现时立即回收 引用;对于那些没有的,缓存机制是 与您的代码无关。
CPython在不再引用时会缓存哪些对象?
CPython在不再引用时不会缓存哪些对象?
只有当对象不可变时,CPython才会缓存不再引用的对象吗? 或者它与对象的(im)可变性无关?
感谢。
答案 0 :(得分:1)
不变性是其中很重要的一部分:你不希望你的新空集成为对现有空集的引用,只是为了在没有你知道它的时候看到它更新了#34;原始&#34 ;已更新。
但是,CPython缓存的对象通常不是在程序生命周期中创建的任意对象。无论是否最终使用,都会在启动时创建小整数。 (我不知道小字符串;它们可能只在必要时创建,但从那时起缓存。)