如何让Python使所有相同的字符串使用相同的内存?

vy3*_*y32 10 python memory-management

可能重复:
python 实习生做什么,什么时候应该使用?

我正在使用python中的程序,该程序必须在数组上关联数百万个字符串对象.我发现如果它们都来自相同的带引号的字符串,则每个附加的"字符串"只是对第一个主字符串的引用.但是,如果从文件中读取字符串,并且字符串全部相等,则每个字符串仍然需要新的内存分配.

也就是说,这需要大约14meg的存储空间:

a = ["foo" for a in range(0,1000000)]
Run Code Online (Sandbox Code Playgroud)

虽然这需要超过65meg的存储空间:

a = ["foo".replace("o","1") for a in range(0,1000000)]
Run Code Online (Sandbox Code Playgroud)

现在我可以通过以下方式使内存占用更少的空间:

s = {"f11":"f11"}
a = [s["foo".replace("o","1")] for a in range(0,1000000)]
Run Code Online (Sandbox Code Playgroud)

但这似乎很愚蠢.有更简单的方法吗?

eri*_*ork 13

只做一个intern(),告诉Python存储并从内存中取出字符串:

a = [intern("foo".replace("o","1")) for a in range(0,1000000)]
Run Code Online (Sandbox Code Playgroud)

这也导致大约18MB,与第一个例子相同.

如果您使用python3,请注意下面的注释.Thx @Abe Karplus

  • 请注意,在Python 3中,`intern`已被重命名为`sys.intern`. (2认同)