def echanger(liste, indice1, indice2):
"""
liste -- liste d'entiers
indice1 -- entier, indice d'un élément de la liste
indice2 -- entier, indice d'un élément de la liste
renvoie une liste de même contenu que liste mais dans laquelle
les éléments d'indices indice1 et indice2 sont échangés.
"""
# on commence par créer une nouvelle liste
# de même contenu que liste:
nvListe = [element for element in liste]
# on échange les éléments dans cette nouvelle liste:
nvListe[indice1], nvListe[indice2] = nvListe[indice2], nvListe[indice1]
return nvListe
a = [2, 3, 4]
b = echanger(a, 0, 1)
a
b
Cette fonction est sans effet de bord. Elle ne modifie pas d'élément défini hors d'elle-même (la liste a
est inchangée).
Mais évidemment, on ne peut plus dire qu'elle a échangé les éléments d'indice1 et d'indice2 de la liste passée en argument: la liste passée en argument est inchangée. La fonction renvoie une autre liste présentant l'échange demandé.
Les deux fonctions ont leur utilité, dans des contextes différents.