Khi chúng ta cần sao chép toàn bộ dữ liệu từ một từ điển chứa các kiểu dữ liệu nguyên thủy (để đơn giản, hãy bỏ qua sự hiện diện của kiểu dữ liệu như datetime vv), sự lựa chọn rõ ràng nhất mà chúng ta có là sử dụng deepcopy
, nhưng deepcopy chậm hơn một số hackish khác phương pháp đạt được cùng một nghĩa là sử dụng serialization-unserialization ví dụ như json-dump-json-load hoặc msgpack-pack-msgpack-unpack. Sự khác biệt về hiệu quả có thể được nhìn thấy ở đây:Một cách nhanh chóng để sâu sắc chỉ là dữ liệu từ một dict python hoặc danh sách?
>>> import timeit
>>> setup = '''
... import msgpack
... import json
... from copy import deepcopy
... data = {'name':'John Doe','ranks':{'sports':13,'edu':34,'arts':45},'grade':5}
... '''
>>> print(timeit.timeit('deepcopy(data)', setup=setup))
12.0860249996
>>> print(timeit.timeit('json.loads(json.dumps(data))', setup=setup))
9.07182312012
>>> print(timeit.timeit('msgpack.unpackb(msgpack.packb(data))', setup=setup))
1.42743492126
json và msgpack (hoặc cPickle) phương pháp này là nhanh hơn so với một deepcopy bình thường, đó là hiển nhiên như deepcopy sẽ làm nhiều hơn nữa trong việc sao chép tất cả các thuộc tính của đối tượng quá .
Câu hỏi: Có cách nào sâu hơn/có sẵn để đạt được chỉ một bản sao dữ liệu của từ điển hoặc danh sách, mà không có tất cả chi phí mà bản in sâu có?
Đó là hiếm khi hữu ích để đo lường hiệu suất trên một tập dữ liệu nhỏ và rút ra kết luận dựa trên đó. Nếu bạn có một cơ sở hạ tầng lồng nhau hoặc lớn hơn thì 'deepcopy' vẫn chậm hơn nhiều? – MSeifert
@MSeifert Tôi đồng ý với phản hồi của bạn, nhưng ý định của tôi ở đây không phải là so sánh sâu với bất kỳ phương pháp nào, yêu cầu chính của tôi là cách giảm toàn bộ chi phí trên bản in sâu nếu tôi quan tâm chỉ là bản sao dữ liệu. – DhruvPathak
có liên quan: https://stackoverflow.com/questions/24756712/deepcopy-is-extremely-slow và https://stackoverflow.com/questions/10128351/any-alternative-to-a-very-slow-deepcopy-in -a-dfs và https://stackoverflow.com/questions/8957400/what-is-the-runtime-complexity-of-pythons-deepcopy và https://writeonly.wordpress.com/2009/05/07/deepcopy -is-a-pig-cho-đơn giản-dữ liệu/ –