python - 是否应该在每个字符串出现时显式调用 intern ?

标签 python string-interning

假设我逐行读取文件并将这些行保存到列表中:

intern('abcd')
lst = []  
for line in f:
    lst.append(line)

并且该文件有五个相同的行:

abcd
abcd
abcd
abcd
abcd

读取完成后,内存中'abcd'会存在五份还是只有一份?

最佳答案

将有 5 份。 intern() 调用返回字符串的一份副本,它不会神奇地使所有具有相同内容的 future 字符串被保留。

但是,我不会对文件数据使用实习。驻留字符串的最大优点是在性能关键部分,您需要尽可能快地进行字典查找。实习允许您在可以使用指针算术时跳过相等测试。

实习也会带来性能损失;每次调用 intern() 时,都会根据内部字典对字符串进行测试,以查看该字符串是否已被实习。这需要一次哈希调用和 0 次或多次相等性测试(如果字符串之前没有被驻留并且没有哈希冲突,则为 0 次;如果存在冲突,则为 1 次以上)。对字符串中的每一行调用 intern() 都会因这些操作而变慢,并且只有当您有大量重复时,我才不会这样做我想内存力的提升会非常大。

关于python - 是否应该在每个字符串出现时显式调用 intern ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19865543/

相关文章:

python - Pandas read_csv 声明 dtype convets 列不正确

python - Ubuntu 上的 Tensorflow GPU/CUDA 安装

python - 变量的文档字符串

python - Flask 应用程序中的单元测试与功能测试?

python - Flask, Gunicorn, Nginx::IOError: [Errno 32] 断管

java - 混淆字符串引用比较 == 和 intern

java - Java 中的 == 运算符

ruby - 什么时候分配一个声明为卡住的字符串(如果有的话?)

java - 为什么 String.intern() 在 JDK 8 和 JDK 9 下返回不同的结果?

C#字符串实习