假设我逐行读取文件并将这些行保存到列表中:
intern('abcd')
lst = []
for line in f:
lst.append(line)
该文件有五个相同的行:
abcd
abcd
abcd
abcd
abcd
读取完成后,内存中会存在 5 个 'abcd' 副本还是只有 1 个?
假设我逐行读取文件并将这些行保存到列表中:
intern('abcd')
lst = []
for line in f:
lst.append(line)
该文件有五个相同的行:
abcd
abcd
abcd
abcd
abcd
读取完成后,内存中会存在 5 个 'abcd' 副本还是只有 1 个?
将有5份。该intern()
调用返回字符串的一个副本,它不会神奇地使所有未来的字符串都具有相同的内容。
但是,我不会将实习用于文件数据。实习字符串的最大优势在于性能关键部分,您需要尽可能快地查找字典。当可以使用指针算术代替时,实习允许您跳过相等测试。
实习也有绩效损失;每次调用intern()
该字符串时,都会针对内部字典进行测试,以查看该字符串是否已被实习。这需要一个哈希调用和 0 个或多个相等性测试(如果字符串之前没有被实习过并且没有哈希冲突,则为 0,如果有冲突则超过一个)。调用intern()
字符串中的每一行都会被这些操作减慢,而且只有当你有大量的重复时,我认为内存增益不会那么好。