Problem je v tom, ze seznam (list) je neco, cemu se v pythonu rika "Mutable" - tj. menitelny objekt.
V praxi to znamena, ze pokud si vytvoris promennou R0 a priradis ji prazdny seznam, tak ve skutecnosti _nastavujes ukazatel R0 na misto pameti, kde se nachazi ten seznam_. Potom kdyz do toho seznamu neco pridas pomoci append, nevytvori se novy seznam, ale jen se zmeni obsah toho mista v pameti. Potom kdyz udelas R0work = R0, tak nekopirujes cely ten seznam, ale jen hodnotu toho ukazatele. Tj. R0 i R0work ukazuji na stejne misto v pameti -> je to "jakoby" ta stejna promenna. Takze pokud ches pracovat s R0work, aniz bys menila R0, je potreba ho zkopirovat. (Predpokladam, ze ta inicializace byl prostre trivialni priklad, ne zpusob, jak to ve skutecnosti inicializujes. Pokud ano, tak je zbytecne "neoptimalni".) R0=[] for x in range (8): R0.append(x) R0work=R0 print id(R0), id(R0work) R0work[-1]=0 print id(R0), id(R0work) print(R0) print (R0work) tady vidis, ze to je porad ten stejny kus pameti. (kdyz si neco takoveho zkusis s retezci, uvidis, ze pri druhem vypisu budou id() ruzna - string je totiz immutable - s kazdou zmenou se vytvari jeho nova instance). Takze tvuj kus kodu, ve funkcni podobe, by byl asi takovyto from copy import deepcopy R0 = range(8) R0work = deepcopy(R0) R0work[-1] = 0 print R0, R0work Nevim, jake mas zkusenosti s programovanim v jinych jazycich, takze se omlouvam, pokud to bylo prilis detailni/strucne - klidne se ptej dal, pokud ti neco neni jasne :) joza 2010/10/14 Charlotte van Leeweneck <[email protected]>: > Dobry den, > > potrebovala bych pomoci s nasledujicim problemem. > > R0=[] > for x in range (8): > R0.append(x) > R0work=R0 > R0work[-1]=0 > > print(R0) > print (R0work) > > > Cílem bylo, aby mi to nahradilo posledni prvek v mnozine R0work prvkem 0, > ale mozinu R0 nechalo nedotcenou > tj. pozadovaný vysledek R0=[0, 1, 2, 3, 4, 5, 6, 7], R0work=[0, 1, 2, 3, 4, > 5, 6, 0] > Bohuzel to tak nefunguje a nahrazuje posledni prvek v obou mnozinach. Kde > delam chybu? > > > Dekuji za odpoved. > Sarka > > > _______________________________________________ > Python mailing list > [email protected] > http://www.py.cz/mailman/listinfo/python > -- Rules of Optimization: Rule 1: Don't do it. Rule 2 (for experts only): Don't do it yet. _______________________________________________ Python mailing list [email protected] http://www.py.cz/mailman/listinfo/python
