2008-12-23 35 views
35

Với cấu trúc dữ liệu (ví dụ: băm băm), cách sạch sẽ/được đề xuất để tạo bản sao sâu để sử dụng ngay lập tức là gì? Giả sử các trường hợp hợp lý, nơi dữ liệu không đặc biệt lớn, không có chu kỳ phức tạp tồn tại, và khả năng đọc/bảo trì/etc. quan trọng hơn tốc độ bằng mọi giá.Cách tốt nhất để tạo bản sao sâu của cấu trúc dữ liệu trong Perl là gì?

Tôi biết rằng tôi có thể sử dụng Storable, Clone, Clone :: Thêm, Clone::Fast, Data::Dumper, v.v. Thực tiễn tốt nhất hiện tại là gì?

+0

[tag: deep-copy] thực sự không liên quan, @JasonMArcher? Bản tóm tắt nói về C và C++, nhưng bản sao nông và sâu là các khái niệm bất khả tri về ngôn ngữ. Bởi một bản sao, bản sao nông thường có nghĩa là (Java, C#, ...), câu hỏi này là yêu cầu cho một bản sao sâu. – Palec

+0

Thẻ của chúng tôi không cần phải git vào minutiae. Đây là tất cả các loại hoạt động nhân bản. Hiện tại chúng tôi có [bản sao], [nhân bản], [sao chép], [sâu], [sao chép sâu], [sâu] + [sao chép], [sâu] + [sao chép] và [sao chép sâu]. – JasonMArcher

Trả lời

17

Clone nhanh hơn nhiều so với Storable::dclone, nhưng sau này hỗ trợ nhiều loại dữ liệu hơn.

Clone::FastClone::More tương đương với nhau nếu bộ nhớ phục vụ đúng, nhưng ít tính năng hơn cả Bản sao, và Scalar::Util::Clone hỗ trợ thậm chí ít hơn nhưng IIRC là nhanh nhất trong số chúng cho một số cấu trúc.

Đối với khả năng đọc, tất cả đều hoạt động giống nhau, chúng hầu như có thể hoán đổi cho nhau.

Nếu bạn không có nhu cầu hiệu suất cụ thể, tôi chỉ sử dụng dclone của Storable.

Tôi sẽ không sử dụng Data::Dumper cho điều này đơn giản chỉ vì nó quá cồng kềnh và bùng binh. Nó có thể sẽ rất chậm.

Đối với những gì nó đáng giá, nếu bạn muốn nhân bản tùy biến thì Data::Visitor cung cấp khả năng hooking và tính năng hoàn toàn nhân bản sâu hoàn chỉnh là hành vi mặc định.

+1

Bạn có liên kết đến Scalar :: Util :: Clone không? Tôi không thể tìm thấy nó trên CPAN hoặc Metacpan ... –

15

Ấn tượng của tôi là Storable::dclone() có phần kinh điển.

7

Clone có lẽ là những gì bạn muốn. Ít nhất, đó là những gì tất cả các mã tôi đã nhìn thấy sử dụng.

Các vấn đề liên quan