1

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

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

该文件有五个相同的行:

abcd
abcd
abcd
abcd
abcd

读取完成后,内存中会存在 5 个 'abcd' 副本还是只有 1 个?

4

1 回答 1

2

将有5份。该intern()调用返回字符串的一个副本,它不会神奇地使所有未来的字符串都具有相同的内容。

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

实习也有绩效损失;每次调用intern()该字符串时,都会针对内部字典进行测试,以查看该字符串是否已被实习。这需要一个哈希调用和 0 个或多个相等性测试(如果字符串之前没有被实习过并且没有哈希冲突,则为 0,如果有冲突则超过一个)。调用intern()字符串中的每一行都会被这些操作减慢,而且只有当你有大量的重复时,我认为内存增益不会那么好。

于 2013-11-08T17:59:27.317 回答