Prenons l'exemple de code qui effectue une itération sur une liste lors de la suppression d'un élément à chaque itération:
x = list(range(5))
for i in x:
print(i)
x.pop()
Il permet d'imprimer 0, 1, 2
. Seuls les trois premiers éléments sont imprimés depuis les deux derniers éléments de la liste ont été enlevés par les deux premières itérations.
Mais si vous essayez quelque chose de similaire sur un dict:
y = {i: i for i in range(5)}
for i in y:
print(i)
y.pop(i)
Il permet d'imprimer 0
, puis élever RuntimeError: dictionary changed size during iteration
, parce que nous sommes la suppression d'une clé dans le dictionnaire lors de l'itération sur elle.
Bien sûr, la modification d'une liste de au cours d'une itération est mauvais. Mais pourquoi est un RuntimeError
pas élevé comme dans le cas du dictionnaire? Est-il une bonne raison à ce comportement?