Duplicaté possible: strong>
Que fait Python stagiaire em > DO, et quand devrait-il être utilisé? P>Je travaille avec un programme dans Python qui doit être corrélé sur un tableau avec des millions d'objets à chaîne. J'ai découvert que s'ils proviennent tous de la même chaîne cité, chaque "chaîne" supplémentaire est juste une référence à la première chaîne principale. Toutefois, si les chaînes sont lues à partir d'un fichier et que si les chaînes sont toutes égales, chacune nécessite encore une nouvelle allocation de mémoire. P>
C'est-à-dire, cela prend environ 14 pieds de stockage: P>
s = {"f11":"f11"} a = [s["foo".replace("o","1")] for a in range(0,1000000)]
3 Réponses :
Vous pouvez essayer quelque chose comme ceci:
[18632400, 18632160, 18632400, 18632160, 18651400, 18651440, 18651360, 18632400, 18651360]
Bonne idée. Malheureusement, c'est un algorithme O (n ** 2) qui sera vraiment lent que la liste devient plus longue.
Garder un dictionnaire de chaînes vues devrait fonctionner (non testé) p> p>
juste faire un stagiaire Cela entraîne également environ 18 Mo, comme dans le Premier exemple. P> Notez également le commentaire ci-dessous, si vous utilisez Python3. THX @BE KARPLUS P> P> () code>, qui indique à Python de stocker et de prendre la chaîne de la mémoire:
Notez que dans Python 3, stagiaire code> a été renommé
sys.Intern code>.
+1 Je n'ai pas connu sur stagiaire () code>.
Merci bien. Merci. Je ne savais pas sur stagiaire. Oui, j'utilise Python3, donc je devrai utiliser Sys.Intern ().
@Maulwurfn, juste parce que la réponse est la même chose que la question est la même.
Pourquoi ne stockez-vous pas la valeur de
remplacer l'opération code> d'abord?
Comment mesurez-vous la taille des listes? Si j'utilise
sys.getsizeof (["FOO" pour une plage dans la plage (0.1000000)]) code> J'ai la même taille que
sys.getsizeof (["FOO" (" o "," 1 ") pour une plage (0.1000000)]) code> - au moins en python 3.2
@Jbernardo, je n'ai pas stocké la valeur de l'opération code> code> d'abord parce que j'essayais intentionnellement de générer nouvelles chaînes i>, plutôt que beaucoup de références à une ancienne chaîne.