[PIPython] Spigolo duro! o testa dura? DIZ. e LISTE

MBposta mbposta
Dom 13 Nov 2005 19:18:38 CET


Ho urtato nuovamento contro uno spigolo!
Premessa:
ho sintetizzato l'errore con questo programmino (nel programma reale i dati li ricavo dal disco con pickle) :


import copy

DIZ={}
chiavi="abcde"
lista=[[0,0,0,0]]*5

for x in range(len(chiavi)):
    DIZ[chiavi[x]]=copy.deepcopy(lista)
    print chiavi[x],DIZ[chiavi[x]]

DIZ["c"][3][2]=1 : operazione di modifica su un solo elemento

print
for x in range(len(chiavi)):
    print chiavi[x],DIZ[chiavi[x]]


RISULTATO:

PRIMA
a [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
b [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
c [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
d [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
e [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]


DOPO
a [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
b [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
c [[0, 0, 1, 0], [0, 0, 1, 0], [0, 0, 1, 0], [0, 0, 1, 0], [0, 0, 1, 0]]  #---> ERRORE
d [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
e [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]

DOMANDA:
perche' mi modifica tutti i valori e non soltanto quello rihiesto il DIZ["c"][3][2]  ?


Grazie a chi mi fa luce!
Mauro

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://list.zope.it/pipermail/python/attachments/20051113/e4063307/attachment.html


More information about the Python mailing list