Vous devez considérer les listes Python comme des 'pointeurs'.
Par exemple, si vous déclarez une liste comme ceci:
elements = [1, 2, 3]
Ce serait vu dans la mémoire comme ceci:
elements → [ ↓, ↓, ↓ ]
1 2 3
Ainsi, lorsque vous modifiez un élément dans la liste que vous faites Quelque chose comme ceci:
elements[1] = 4
4
elements → [ ↓, ↑, ↓ ]
1 2 3
Notez comment le numéro 2 n'a pas de référence de pointeur de sorte qu'il sera 'allé o r perdu de mémoire »et ce n'est plus accessible. Ainsi, la même chose se produit lorsque vous réattribuer la variable elle-même:
elements[:] = []
[]
elements ↑ [ ↓, ↓, ↓ ]
1 4 3
La clé de comprendre ici est que la liste originale est également « disparu ou de la mémoire perdue » et il est plus accessible. Une autre clé importante à comprendre est que le découpage en tranches:
elements[:]
Vous obtenez le pointeur (ou la flèche dans mes illustrations) auquel la variable fait référence.
Voilà pourquoi il est exactement la même chose à utiliser
del elements[:]
(effacer la flèche et définir une nouvelle flèche à une liste vide)
ou
elements[:] = []
(je fais la variable maintenant le point à une nouvelle liste vide, l'ancienne flèche sera supprimée quand elle sera déréférencée)
Espérons que cela aide!
S'il n'y a pas de condition dans la boucle, il n'y a pas besoin d'utiliser une boucle. Peut-être que l'auteur n'est pas au courant des autres méthodes. –
C'est un mauvais code. L'avez-vous vu ici? Peut-être que c'est juste une démo de copier une liste pour éviter les pièges de la suppression en itérant. – tdelaney
Le code est tel qu'il est. Et c'est un "vrai" code. Mais merci, vous me réconfortez dans ce que je pensais. Mais quand il s'agit de comprendre le code de quelqu'un d'autre, j'ai toujours peur de manquer un point subtil ... –