239 votes

Différentes manières d'effacer les listes

Y a-t-il une raison de faire quelque chose de plus compliqué que l'une de ces deux lignes lorsque vous voulez effacer une liste en Python ?

old_list = []
old_list = list()

La raison de ma question est que je viens de voir cela dans un code en cours d'exécution :

del old_list[ 0:len(old_list) ]

1 votes

Pourquoi faites-vous cela ? Le ramassage des ordures fonctionne. Pourquoi ne pas simplement ignorer l'ancienne valeur de la liste et laisser Python la nettoyer automatiquement ?

43 votes

@S.Lott : Le poster n'a pas écrit le code, et demande pourquoi l'auteur original l'a fait.

1 votes

Vous pourriez aussi faire : while l : l.pop()

384voto

Koba Points 2319

L'effacement d'une liste en place affectera toutes les autres références de la même liste.

Par exemple, cette méthode n'affecte pas les autres références :

>>> a = [1, 2, 3]
>>> b = a
>>> a = []
>>> print(a)
[]
>>> print(b)
[1, 2, 3]

Mais celui-là, oui :

>>> a = [1, 2, 3]
>>> b = a
>>> del a[:]      # equivalent to   del a[0:len(a)]
>>> print(a)
[]
>>> print(b)
[]
>>> a is b
True

Vous pouvez aussi le faire :

>>> a[:] = []

90 votes

Vous pouvez également faire del a[:]

1 votes

Pourquoi la première n'affectera que a ? Je pensais a et b référence au même objet... Je veux juste savoir pourquoi. Merci.

51 votes

Avec python 3.3 et plus tard vous pouvez aller avec a.clear() pas de problème !

72voto

eugene y Points 37378

Faire alist = [] n'efface pas la liste, crée simplement une liste vide et la lie à la variable alist . L'ancienne liste existera toujours si elle avait d'autres liaisons de variables.

Pour effacer une liste en place vous pouvez utiliser l'une des méthodes suivantes :

  1. alist.clear() # Python 3.3+, most obvious
  2. del alist[:]
  3. alist[:] = []
  4. alist *= 0 # fastest

Voir le Types de séquences mutables pour plus de détails.

37voto

NixMan Points 116

Il existe un moyen très simple d'effacer une liste en python. Utilisez del list_name[ :] .

Par exemple :

>>> a = [1, 2, 3]
>>> b = a
>>> del a[:]
>>> print a, b
[] []

13voto

besen Points 10430

Il me semble que del vous rendra la mémoire, tandis que l'attribution d'une nouvelle liste fera que l'ancienne ne sera effacée que lorsque le gc fonctionnera.matter.

Cela peut être utile pour les grandes listes, mais pour les petites listes, cela devrait être négligeable.

Modifier : Comme Algorias, ça n'a pas d'importance.

Notez que

del old_list[ 0:len(old_list) ]

est équivalent à

del old_list[:]

2 votes

Gc n'est pas exécuté en cycles. La liste est libérée dès que sa dernière référence est abandonnée.

2 votes

Algorias : c'est vrai pour CPython, mais peut ne pas l'être pour d'autres implémentations.

2 votes

Del old_list[ 0:len(old_list) ] et del old_list[ :] ont le même résultat, mais la dernière est plus rapide (vérifié en Python 2.6)

8voto

ytpillai Points 2124
del list[:] 

Supprime les valeurs de cette variable de liste

del list

Supprime la variable elle-même de la mémoire

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X