在 Python 2.7 中,字符串 ID 的行为可能会令人费解。虽然字符串是不可变的,但它们的 ID 似乎会随着时间而改变。本文探讨了此行为背后的原因。
Python 中的 Id Interning
默认情况下,CPython 不会对所有字符串进行实习。但是,可以使用 sys.intern() 函数或 PyCode_New 函数的 intern_string_constants() 调用来保留满足特定条件的字符串。驻留确保代码库中同一字符串的多次出现使用同一个对象。
符合驻留条件的字符串包括:
更改 ID
如果字符串不符合实习条件,则其 ID 将继续更改。这是因为 Python 可以自由地为新字符串重用内存位置,从而导致同一文字具有不同的 ID。
Interning 和字符串使用
ID 的行为取决于关于如何使用字符串:
连接字符串
连接字符串也会影响 ID。在优化器限制内连接的字符串可能会导致中间字符串,从而导致连接字符串具有相同的 ID。
结论
Python 2.7 中不可变字符串的 ID 为由于实习机制和内存重用,并不总是相同的。了解这些因素有助于澄清字符串 ID 中明显的不一致。
以上是为什么不可变字符串 ID 在 Python 2.7 中会发生变化?的详细内容。更多信息请关注PHP中文网其他相关文章!