[python] Kopie zanorenych slovniku ci seznamu

Jan Novák jan.novak na topinfo.cz
Pondělí Červen 21 14:46:15 CEST 2004


Narazil jsem na jednu vlastnost Pythonu.
Potrebuji dale pracovat s kopii objektu, tak aby neovlivnila zdroj.

Otayka zni:
Pokud bude zanoreni kosatejsi, lze to resit i lepe jinak nez smyckou nebo
pomoci modulu copy, ktery je napr. v nasledujicim pripade nekolikanasobne
pomalejsi?

Muj dalsi mozny namet jak by to udelat je serializace a deserializace
struktury. rychlost?

#vnoreny slovnik se da jako odkaz
>>> zdroj={1:{},3:{4:5}}
>>> kopie=zdroj.copy() #pripadne dict(zdroj)
>>> kopie[3][4]=6
>>> zdroj
{1: {}, 3: {4: 6}}

#toto funguje (ale pouze pro 2 vnoreni apod.)
>>> zdroj={1:{},3:{4:5}}
>>> kopie={}
>>> i=zdroj.items()
>>> for k,v in i: kopie[k]=v.copy()
>>> zdroj
{1: {}, 3: {4: 5}}

#toto funguje, ale je to podstatne pomalejsi nez první verze
>>> zdroj={1:{},3:{4:5}}
>>> import copy
>>> kopie=copy.deepcopy(zdroj)
>>> zdroj
{1: {}, 3: {4: 5}}


Diky
Honza Novák




Další informace o konferenci Python