2011-10-27 3 views
3

J'ai une liste a et une liste b qui est (devrait être) une copie de la liste a.Python: éléments de la liste d'échange dans une liste copiée sans affecter la liste d'origine

a = [[['a'], ['b'], ['c']], [['A'], ['B'], ['C']]] 
b = a[:][:] 
b[0][1], b[0][2] = b[0][2], b[0][1] 

Si je regarde maintenant a et b je reçois le texte suivant:

a = [[['a'], ['c'], ['b']], [['A'], ['B'], ['C']]] 
b = [[['a'], ['c'], ['b']], [['A'], ['B'], ['C']]] 

Pourquoi l'échange dans la liste b affecte également la liste originale a?

Merci.

+0

doublon Peut-être de http://stackoverflow.com/q/1601269/589206 – hochl

+0

Je suppose que 'b = a [:] [:] 'pourrait être écrit comme' b = a [:] ' – sehe

Répondre

2

b = a[:][:] est juste b = (a[:])[:] ou une copie d'une copie de la liste d'origine. Les listes dans la liste d'origine sont toujours référencées et lorsque vous les modifiez, elles apparaissent dans les deux listes.

Vous pouvez faire

b = [l[:] for l in a] # a new list, consisting of copies each sublist 

ou

from copy import deepcopy 
b = deepcopy(a) 
+0

Merci, ça marche maintenant! – verbit

0
import copy 

a = [[['a'], ['b'], ['c']], [['A'], ['B'], ['C']]] 
b = copy.deepcopy(a) 
b[0][1], b[0][2] = b[0][2], b[0][1] 
print a, b 
Questions connexes