假设我逐行读取文件并将这些行保存到列表中:
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/