Ez a modul két függvényt tartalmaz, melyekkel objektumokat másolhatsz.
A copy(object) ⇒ object egy “egyszerű” másolatot készít az objektumról. Az egyszerű azt jelenti, hogy az objektum másolásra kerül, de ha ez egy tároló (container) objektum, akkor annak elemei az eredeti objektum elemeire hivatkoznak.
A példában figyeljük meg a két lista elemeinek memóriacímét, mely a 9-es és a 3-as értékű elemeknél egyezik! Így látható, hogy mivel egy tároló objektumról van szó, az elemek az eredeti objektumra mutatnak.
# File: copy_objektum_masolas_1.py import copy a = [[1],[2],[3]] b = copy.copy(a) print "modositas elott", "=>" print a print b # az eredetit modositjuk a[0][0] = 9 # a nulladik elem egy lista, amelynek nulladik eleme 9 a[1] = None # FONTOS: a 0. elem valtozasa b-n is megfigyelheto, mig az 1. elem valtozasa NEM, mert az nem tarolo tipusu elem. print "modositas utan", "=>" print a print b print "elemek memoriacimenek ellenorzese:" print "a=>" for elem in a: print elem, id(elem) # FONTOS: a [9],[3] memoriacime ugyanaz, mint b [9],[3]-elemeknek! print "b=>" for elem in b: print elem, id(elem)
# File: copy_objektum_masolas_1.out modositas elott => [[1], [2], [3]] [[1], [2], [3]] modositas utan => [[9], None, [3]] [[9], [2], [3]] elemek memoriacimenek ellenorzese: a=> [9] 10787416 None 505028048 [3] 10787976 b=> [9] 10787416 [2] 10798544 [3] 10787976
# File: copy_objektum_masolas_egyszeru_szeletelessel.py import copy a = [[1],[2],[3]] b = a[:] vasarolni = {"anyanak":"sampon", "apanak":"sakk-keszlet"} c= vasarolni.copy() # lathato, hogy a masolat elemeinek memoriacime ugyanaz mint az eredetinek. print "elemek memoriacimenek ellenorzese:" print "a=>" for elem in a: print elem, id(elem) print "b=>" for elem in b: print elem, id(elem) print "c=>" print c # COPY metodusa a szotarnak van, listanak NINCS
# File: copy_objektum_masolas_egyszeru_szeletelessel.out elemek memoriacimenek ellenorzese: a=> [1] 10791512 [2] 10802640 [3] 10792072 b=> [1] 10791512 [2] 10802640 [3] 10792072 c=> {'anyanak': 'sampon', 'apanak': 'sakk-keszlet'}
A deepcopy(object) ⇒ object függvénnyel teljes, rekurzív másolatot készíthetsz az objektumról – ha az tároló típusó (lista például), az objektum minden eleme másolásra kerül.
# File: copy_objektumok_rekurziv_masolasa.py import copy a = [[1],[2],[3]] b = copy.deepcopy(a) print "modositas elott", "=>" print a print b # az eredetit modositjuk a[0][0] = 0 a[1] = None print "modositas utan", "=>" print a print b # elemek memoriacime kulonbozo, tehat kulon peldanyok leteznek print "a =>" for elem in a: print elem, id(elem) print "b =>" for elem in b: print elem, id(elem)
# File: copy_objektumok_rekurziv_masolasa.out modositas elott => [[1], [2], [3]] [[1], [2], [3]] modositas utan => [[0], None, [3]] [[1], [2], [3]] a => [0] 10787416 None 505028048 [3] 10787976 b => [1] 10788056 [2] 10788336 [3] 10788016
You must be logged in to post a comment.