kopieren.deepcopy vs Gurke

Ich habe eine Baum-Struktur des widgets z.B. Sammlung enthält Modelle und Modell enthält widgets. Ich kopieren wollen ganze Kollektion copy.deepcopy ist schneller im Vergleich zu 'pickle und de-Gurke' Ing das Objekt aber cPickle als in C geschrieben ist viel schneller, so

  1. Warum sollte ich(wir) immer mit cPickle statt deepcopy?
  2. Gibt es eine andere kopieren alternative? denn Gurke ist langsamer als deepcopy aber cPickle ist schneller, so kann eine C-Implementierung von deepcopy werden die Gewinner

Probe-test-code:

import copy
import pickle
import cPickle

class A(object): pass

d = {}
for i in range(1000):
    d[i] = A()

def copy1():
    return copy.deepcopy(d)

def copy2():
    return pickle.loads(pickle.dumps(d, -1))

def copy3():
    return cPickle.loads(cPickle.dumps(d, -1))

Timings:

>python -m timeit -s "import c" "c.copy1()"
10 loops, best of 3: 46.3 msec per loop

>python -m timeit -s "import c" "c.copy2()"
10 loops, best of 3: 93.3 msec per loop

>python -m timeit -s "import c" "c.copy3()"
100 loops, best of 3: 17.1 msec per loop
  • Dies ist eine sehr nützliche Beobachtung.
  • hm, solltest du nicht vergleichen pickle mit copy.copy?
  • Kommt es überhaupt auf die Struktur von dem, was Sie kopieren? Wie, macht es einen Unterschied, wenn, sagen wir, den Speicher, die zu kopierenden Objekte ist nicht zusammenhängenden, oder die zugrunde liegenden Zeiger haben eine lange Kette zu Folgen?
  • Gurke hat eine deepcopy
Schreibe einen Kommentar