可能重复:
What does python intern do, and when should it be used?如何让Python使所有相同的字符串使用相同的内存?
我与Python中的程序,必须以百万计的字符串对象的数组上相关工作。我发现如果它们全都来自同一个引用的字符串,则每个附加的“字符串”仅仅是对第一个主字符串的引用。但是,如果从文件中读取字符串,并且字符串全部相等,则每个字符串仍需要新的内存分配。
也就是说,大约需要存储的14meg:
a = ["foo" for a in range(0,1000000)]
虽然这需要比存储的65meg更多:
现在我可以让内存取空间少得多与此:
s = {"f11":"f11"}
a = [s["foo".replace("o","1")] for a in range(0,1000000)]
但这似乎很愚蠢。有没有更简单的方法来做到这一点?
@Maulwurfn,只是因为答案是一样的并不意味着问题是一样的。 – 2012-08-05 17:16:48
为什么不先储存'replace'操作的值? – JBernardo 2012-08-05 17:17:05
你怎么测量列表的大小?如果我使用'sys.getsizeof([“foo”作为范围(0,1000000)])'我得到与'sys.getsizeof([“foo”.replace(“o”,“1”)相同的大小)对于范围(0,1000000)])'' - 至少在Python 3.2中 – 2012-08-05 18:54:32