2017-03-02 4 views
0

J'ai du mal à comprendre la propriété pass by value en python. Dans le code suivant, runner fait une copie de current et runner.next pointe vers le nœud suivant de la liste liée donnée, alors que nous avons défini à runner.next.next, comment cela affecte-t-il cur.next.next? Est-ce que runner.next et cur.next pointent tous les deux vers la même adresse? Parce que dans mon esprit, le coureur n'est qu'une copie du courant, et il n'aura pas accès au cur.next original. S'il te plaît, sermonnebesoin de clarification sur le pointeur node.next dans python linkedlist

 def remove_dups_followup(ll): 
      if ll.head is None: 
       return 

      current = ll.head 
      while current: 
       runner = current 
       while runner.next: 
        if runner.next.value == current.value: 
         runner.next = runner.next.next 
        else: 
         runner = runner.next 
       current = current.next 

      return ll.head 

Répondre

0
runner = current 

Cela ne crée pas une copie de current, mais attribue un autre nom à l'objet également connu sous le nom current. Ainsi, runner et current sont simplement deux noms différents pour la même instance d'objet. Toute modification de l'état runner affecte donc également current, au moins jusqu'à ce que runner soit réaffecté au nœud suivant de la liste.