Python 字符串的不变性意味着它们一旦创建就无法更改。然而,由 id() 函数表示的对象标识对于字符串来说可能会发生变化,从而导致混乱。
一般来说,字符串的 id()每次调用时都会发生变化,即使对于相同的字符串文字也是如此。这是因为 Python 不保证默认情况下实习所有字符串。
id('so') 140614155123888 id('so') 140614155123848 id('so') 140614155123808
但是,也有例外。满足以下条件的字符串将被保留并保持相同的 id():
将字符串分配给变量可以影响其 id() 行为。当变量引用字符串时,Python 通过使用内部版本将字符串的值存储在内存中一次来优化性能。
so = 'so' id('so') # Now references the same interned string as 'so' 140614155123728
Python 内部使用一个函数来称为 intern_string_constants() 的内部字符串。此函数适用于满足前面提到的条件的字符串(例如,示例中的“hello”)。
Python 的编译器和优化器也在实习中发挥作用。代码对象工厂函数可以保留任何可以表示为有效标识符的字符串(例如,第二个示例中的“so”)。此外,窥视孔或 AST 优化器可以折叠涉及常量的简单表达式,从而产生中间结果。
虽然 Python 的字符串是不可变的,但它们的 id() 可以改变,具体取决于以下因素:实习、变量范围和优化器行为。实习有助于优化内存使用和性能,了解其行为以避免潜在的混乱非常有价值。
以上是为什么 Python 的 id() 会改变不可变字符串?的详细内容。更多信息请关注PHP中文网其他相关文章!