En Python, lorsqu'une fonction reçoit une liste comme argument, le paramètre devient effectivement une référence pointant vers l'emplacement de la liste d'origine en mémoire. Toute modification apportée à la liste au sein de la fonction est directement reflétée dans la liste d'appels.
Cependant, le code suivant démontre un comportement particulier qui remet en question cette compréhension :
<code class="python">def function1(list_arg): a = function2() # function2 returns an array of numbers list_arg = list(a) list1 = [0] * 5 function1(list1) print(list1) # [0, 0, 0, 0, 0]</code>
Dans cet exemple, nous avons l'intention que la fonction1 modifie list1 en remplaçant ses éléments par ceux du tableau a. Mais le résultat montre que list1 reste inchangé. Pourquoi cela se produit-il ?
Le problème vient de l'hypothèse incorrecte selon laquelle l'attribution d'une nouvelle valeur à la variable list_arg dans function1 modifie la liste d'origine. En réalité, cette affectation modifie uniquement la référence de list_arg pour pointer vers un objet différent en mémoire. La liste originale référencée par le code appelant reste intacte.
Pour réussir à modifier la liste originale dans la fonction1, nous devons modifier ses éléments individuels. Cela peut être accompli via l'affectation de tranche :
<code class="python">list_arg[:] = list(a)</code>
L'affectation de tranche remplace toute la plage d'éléments dans list_arg par les valeurs de list(a). En effet, cette action modifie directement la liste d'origine.
Bien que l'affectation de tranches fournisse une solution pratique, il est important de noter son potentiel de confusion. En modifiant une liste en place, le code devient moins transparent et plus susceptible aux malentendus de la part des autres développeurs qui le maintiennent. Envisagez des approches alternatives, telles que le renvoi d'une nouvelle liste modifiée à partir de la fonction, pour améliorer la clarté et la lisibilité du code.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!