Je viens de penser que je l'avais noté maintenant que je l'ai vu - ce serait bien d'obtenir une confirmation sur ce comportement; J'ai vu Comment puis-je passer une variable par référence? A>, mais je ne suis pas sûr comment l'interpréter dans ce contexte. Disons que nous avons ces deux tableaux / listes: p> L'interprète les voit initialement comme suit: p> Maintenant changeons donc, partout où la liste Fondamentalement, j'ai trouvé un cas d'utilisation, où il serait pratique de pouvoir définir par ex. A [2] code>, et voyez ce qui se passe: p>
B code> a une référence à la liste em> em>
a code>, la valeur a été mise à jour - mais où
b code> a été initialisé avec (une référence à?) un élément de em> Liste
A code>, il semble que Python a élargi la valeur au moment de l'initialisation et a ainsi stocké l'élément par valeur (pas par référence), il est donc de sorte que la valeur ne met évidemment pas à jour. P>
b = [-1 a [2] -1] code>, puis mettez ensuite la mise à jour
a [2] code> et être en mesure de compter la valeur la plus dernière de
A [ 2] code> sera émis lors de l'obtention de la valeur de (dans ce cas)
b [1] code>. Y a-t-il un moyen de le faire en python, sans avoir à faire
b = [-1 A -1] code>, puis lire
b [1] [2] code> (i "D Aimez avoir la valeur de
A [2] code> juste en utilisant
b [1] code>)? p> p>
3 Réponses :
Vous appelez de l'autre côté, A code> est une référence à une liste mutable. Donc, lorsque vous dites:
__ settitem __ code> sur la liste qui définit un élément de la liste em>.
Liste .__ Settitem __ Code> Ne tente pas de muter l'élément utilisé pour être stocké dans le deuxième index. Il remplace simplement cette référence avec une nouvelle. P>
x = a [2] code> appels
__ getItem __ code> qui crée une nouvelle référence à l'objet stocké à cet indice dans la liste. p> p>
>>> a = [1000,2000, [2] , 4000] >>> b = [-1, a, -100, a[2], -1] >>> a[2] += [5] # we can modify [2] from from either a[2] or b[-2] >>> b[-2]+= [10] # `+=` , `list.extend`, `list.append` changes the list in-place >>> a[2] is b[-2] #both still points to the same object as lists are mutable True >>> a [1000, 2000, [2, 5, 10], 4000] >>> b [-1, [1000, 2000, [2, 5, 10], 4000], -100, [2, 5, 10], -1]
Pour résoudre le problème de l'accès aux sublistes par index de la liste extérieure, vous pouvez utiliser quelque chose comme: pour le comportement exact que vous demandez, ajoutez ce qui suit: p> note, cela va probablement casser si vous essayez d'utiliser des tranches. p> p>