In questo caso, poiché le stringhe sono piuttosto brevi e ce ne sono così tante, si risparmia un bel po 'di memoria usando le stringhe intern
. Supponendo che ci siano solo lettere minuscole nelle stringhe, questo è 26 * 26 = 676 possibili stringhe, quindi ci devono essere molte ripetizioni in questa lista; intern
assicurerà che tali ripetizioni non risultino in oggetti univoci, ma si riferiscono tutti allo stesso oggetto di base.
È possibile che Python abbia già messo a punto brevi stringhe; ma guardando un numero di fonti diverse, sembra che questo dipenda molto dall'implementazione. Quindi chiamare intern
in questo caso è probabilmente la strada da percorrere; YMMV.
Come un'elaborazione sul perché questo è molto probabile che per risparmiare memoria, considerare quanto segue:
>>> sys.getsizeof('')
40
>>> sys.getsizeof('a')
41
>>> sys.getsizeof('ab')
42
>>> sys.getsizeof('abc')
43
Aggiunta di singoli caratteri di una stringa aggiunge solo un byte alla dimensione della stringa stessa, ma ogni la stringa occupa da sola 40 byte.
Ora ho imparato che Python in generale consuma abbastanza memoria. Come correttamente sottolineato, la lunghezza delle stringhe non è il problema qui, ma la dimensione minima degli oggetti. Sono rimasto un po 'scioccato anche scoprire che la dimensione di un int semplice è di 24 byte (sul sistema a 64 bit). Buono a sapersi ... –