是否可以直接检查驻留字符串池?

Is it possible to inspect the interned string pool directly?

是否可以在 python 中检查和查看驻留字符串的字符串池?我熟悉 sys.intern() 函数,但是有没有办法检查那里的数据?

没有枚举驻留字符串池的机制。参见源代码中的模块Objects/unicodeobject.cPython/sysmodule.c。具体来说,包含驻留字符串的 var 的定义:static PyObject *interned = NULL;.

理论上信息可能会被公开,但事实并非如此,因为它的用处非常有限。部分原因是大多数驻留字符串是 "mortal"。也就是说,当不再引用它们时,它们将从驻留字符串缓存中删除。公开缓存字符串集的价值非常接近于零,这使得很难证明代码这样做是合理的。特别是因为这样做需要长时间持有 GIL 或制作内部字符串字典的副本,以便可以对其进行迭代而不影响该缓存的其他并发操作。