可能重複:
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