Différentes façons de compensation des listes
Est-il une raison pour faire quelque chose de plus compliqué que l'une de ces deux lignes lorsque vous souhaitez effacer une liste en Python?
old_list = []
old_list = list()
La raison pour laquelle je demande, c'est que je viens de voir cela dans certains cours d'exécution de code:
del old_list[ 0:len(old_list) ]
- Pourquoi faites-vous cela? La Collecte des ordures œuvres. Pourquoi ne pas tout simplement ignorer l'ancienne valeur de la liste et laissez Python nettoyer automatiquement?
- L'affiche n'a pas écrit le code, et est de se demander pourquoi l'écrivain original peut l'avoir fait.
- Vous pouvez aussi faire: alors que l: l.pop()
- LOL. Je suis sûr que c'est efficace.
- Personne n'a rien dit asbout qu'il soit efficace...
- Pas liés à votre question, mais vous ne devriez pas utiliser len lors de la spécification d'une tranche.
a[:x]
signifie en commençant à x eta[x:]
signifie x à la fin.a[ 0:len(a) ]
peut être écrite commea[:]
. Vous pouvez également utiliser des négatifs à partir de la fin (a[-1]
est le dernier élément).
InformationsquelleAutor johannix | 2009-05-12
Vous devez vous connecter pour publier un commentaire.
La compensation d'une liste à la place affectera tous les autres références de la même liste.
Par exemple, cette méthode n'affecte pas les autres références:
Mais celui-ci n':
Vous pouvez aussi faire:
del a[:]
a
? J'ai penséa
etb
référence au même objet... veux Juste savoir pourquoi. Merci.a.clear()
, pas de problème!Il y a un moyen très simple pour effacer une liste python. Utilisation del list_name[:].
Par exemple:
Faire
alist = []
ne pas effacer la liste, il suffit de crée une liste vide et le lie à la variablealist
. L'ancienne liste continuera d'exister, si elle avait d'autres variables liaisons.Pour vider une liste en place, vous pouvez utiliser l'une de ces façons:
alist.clear() # Python 3.3+, most obvious
del alist[:]
alist[:] = []
alist *= 0 # fastest
Voir le Mutable Types De Séquence page de documentation pour plus de détails.
Il me semble que la del va vous donner les secours de la mémoire, tandis que l'attribution d'une nouvelle liste fera l'ancien être supprimé que lorsque le gc s'exécute.de la matière.Cela peut être utile pour les grandes listes, mais pour une petite liste de elle devrait être négligeable.
Modifier: Comme Algorias, il n'a pas d'importance.
Noter que
est équivalent à
Il y a deux cas dans lesquels vous pouvez effacer une liste:
old_list
plus loin dans votre code;Dans le cas 1 vous suffit d'aller sur la mission:
Dans le cas 2 la
del
déclaration permettrait de réduire le nombre de références à l'objet de la liste le nomold list
points. Si l'objet de la liste est seulement signalé par le nomold_list
à, le compteur de référence de 0, et l'objet sera libéré pour la collecte des ordures.Va supprimer les valeurs de la variable de liste
Va supprimer la variable elle-même à partir de la mémoire
Si vous êtes à la suppression de la liste, vous, de toute évidence, n'ont pas besoin de la liste. Si oui, vous pouvez simplement supprimer la totalité de la liste par simple del méthode.
Mais dans ce cas, vous en aurez besoin, vous pouvez la réinitialiser elle. Ou, simplement, clairement l'un de ses éléments par
une autre solution qui fonctionne bien est de créer la liste vide comme référence la liste est vide.
par exemple vous avez une liste de
a_list = [1,2,3]
. Pour effacer, il suffit de rendre le suivant:cela fera
a_list
une liste vide tout comme leempt_list
.