Я знаю, что это не отвечает на ваш вопрос, но я думаю, что это примечательно для людей, которые смотрят на этот вопрос.
Если данные, которые вы копируете, просты по своей природе, глубокое копирование может оказаться излишним. Я имею в виду простой характер, если ваши данные представимы в виде Json. Позвольте мне проиллюстрировать с кодом:
Я использовал http://www.json -generator.com / , чтобы получить пример данных JSON.
def deepCopyList(inp):
for vl in inp:
if isinstance(vl, list):
yield list(deepCopyList(vl))
elif isinstance(vl, dict):
yield deepCopyDict(vl)
def deepCopyDict(inp):
outp = inp.copy()
for ky, vl in outp.iteritems():
if isinstance(vl, dict):
outp[ky] = deepCopyDict(vl)
elif isinstance(vl, list):
outp[ky] = list(deepCopyList(vl))
return outp
def simpleDeepCopy(inp):
if isinstance(inp, dict):
return deepCopyDict(inp)
elif isinstance(inp, list):
return deepCopyList(inp)
else:
return inp
if __name__ == '__main__':
import simplejson as json
import time
from copy import deepcopy
fl = open('sample.json', 'r')
sample = json.load(fl)
start = time.time()
for _ in xrange(10000):
tmp = simpleDeepCopy(sample)
end = time.time()
print 'simpleDeepCopy: ' + str(end - start)
start = time.time()
for _ in xrange(10000):
tmp = deepcopy(sample)
end = time.time()
print 'copy.deepcopy: ' + str(end - start)
выход:
simpleDeepCopy: 0.0132050514221
copy.deepcopy: 2.66142916679
simpleDeepCopy: 0.0128579139709
copy.deepcopy: 2.60736298561