Powiel możliwe:
What does python intern do, and when should it be used?Jak sprawić, aby Python powodował, że wszystkie identyczne ciągi używały tej samej pamięci?
Pracuję z programu w Pythonie, który musi korelować na tablicy z milionami obiektów smyczkowych. Odkryłem, że jeśli wszystkie pochodzą z tego samego cytowanego ciągu, każdy dodatkowy "ciąg" jest po prostu odniesieniem do pierwszego, głównego ciągu. Jednak jeśli łańcuchy są odczytywane z pliku, a wszystkie łańcuchy są równe, to każdy z nich wymaga nowego przydziału pamięci.
Oznacza to, że zajmuje to około 14meg przechowywania:
a = ["foo" for a in range(0,1000000)]
Choć wymaga to więcej niż 65meg przechowywania:
a = ["foo".replace("o","1") for a in range(0,1000000)]
Teraz mogę uczynić pamięć wziąć dużo mniej miejsca z tym:
s = {"f11":"f11"}
a = [s["foo".replace("o","1")] for a in range(0,1000000)]
Ale to wydaje się głupie. Czy istnieje prostszy sposób na zrobienie tego?
@Maulwurfn, tylko dlatego, że odpowiedź jest taka sama, nie oznacza, że pytanie jest takie samo. –
dlaczego nie przechowujesz najpierw wartości operacji 'replace'? – JBernardo
Jak mierzysz rozmiar list? Jeśli używam 'sys.getsizeof ([" foo "dla a w zakresie (0,1000000)])' Dostaję ten sam rozmiar co 'sys.getsizeof ([" foo ".replace (" o "," 1 ") dla zakresu (0,1000000)]) '- przynajmniej w Pythonie 3.2 –