gpt4 book ai didi

python - Python 会实习生字符串吗?

转载 作者:太空狗 更新时间:2023-10-29 17:43:24 25 4
gpt4 key购买 nike

在 Java 中,显式声明的字符串由 JVM 驻留,因此同一字符串的后续声明会导致两个指向同一字符串实例的指针,而不是两个单独(但相同)的字符串。

例如:

public String baz() {
String a = "astring";
return a;
}

public String bar() {
String b = "astring"
return b;
}

public void main() {
String a = baz()
String b = bar()
assert(a == b) // passes
}

我的问题是,CPython(或任何其他 Python 运行时)是否对字符串做同样的事情?例如,如果我有一些类(class):

class example():
def __init__():
self._inst = 'instance'

并创建该类的 10 个实例,它们中的每一个是否都有一个引用内存中相同字符串的实例变量,或者我最终会得到 10 个单独的字符串?

最佳答案

这称为实习,是的,Python 确实在某种程度上这样做,用于创建为字符串文字的较短字符串。参见 About the changing id of an immutable string进行一些讨论。

Interning 依赖于运行时,没有标准。实习始终是内存使用和检查是否创建相同字符串的成本之间的权衡。有 sys.intern() function如果您愿意,可以强制执行此问题,其中记录了 一些 实习 Python 自动为您做的事情:

Normally, the names used in Python programs are automatically interned, and the dictionaries used to hold module, class or instance attributes have interned keys.

请注意,Python 2 中的 intern() 函数曾经是内置函数,无需导入。

关于python - Python 会实习生字符串吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17679861/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com