可能是重复问题:
Python中的intern是做什么的,何时应该使用它?
我正在使用Python编写一个程序,需要对包含数百万个字符串对象的数组进行相关操作。我发现,如果它们都来自同一带引号的字符串,每个附加的"字符串"只是对第一个主字符串的引用。但是如果这些字符串从文件中读取,并且这些字符串都相等,则每个字符串仍然需要新的内存分配。
也就是说,这大约需要14兆字节的存储空间:
a = ["foo" for a in range(0,1000000)]
虽然这需要超过65兆的存储空间:
a = ["foo".replace("o","1") for a in range(0,1000000)]
现在我可以使用以下代码使内存占用更小:
s = {"f11":"f11"}
a = [s["foo".replace("o","1")] for a in range(0,1000000)]
但这似乎有些愚蠢。有没有更简单的方法来做到这一点?
replace
操作的值呢? - JBernardosys.getsizeof(["foo" for a in range(0,1000000)])
,我得到的大小与sys.getsizeof(["foo".replace("o","1") for a in range(0,1000000)])
相同 -- 至少在 Python 3.2 中。 - the wolf