2008-12-23 20 views
35

給定一個數據結構(例如散列哈希),建立一個深層副本以供立即使用的乾淨/推薦的方法是什麼?假設合理的情況下,數據不是特別大,不存在複雜的循環,以及可讀性/可維護性等。無論如何都比速度更重要。在Perl中製作數據結構的深層副本的最佳方法是什麼?

我知道我可以使用Storable,Clone,Clone ::更多,Clone::Fast,Data::Dumper等。目前的最佳做法是什麼?

+0

是[tag:deep-copy]真的不相關,@JasonMArcher?關於C和C++的總結會談,但淺層和深層複製是語言不可知的概念。通過克隆,淺拷貝通常意味着(Java,C#,...),這個問題需要一個深層拷貝。 – Palec 2015-07-08 09:34:46

+0

我們的標籤不需要混淆成細節。這些都是各種克隆操作。目前我們有[克隆],[克隆],[複製],[深克隆],[深克隆],[深] + [克隆],[深] + [複製]和[深度複製]。 – JasonMArcher 2015-07-08 15:47:58

回答

17

CloneStorable::dclone快得多,但後者支持更多的數據類型。

Clone::FastClone::More是幾乎等價的,如果沒記錯的話,但更小的特徵,甚至比克隆完整,Scalar::Util::Clone甚至更​​少支持,但IIRC是一些結構最快的這一切。

關於可讀性,這些應該都是一樣的,它們實際上是可以互換的。

如果您沒有特定的性能需求,我只能使用Storable的dclone。

我不會使用Data::Dumper,因爲這很麻煩和迂迴。它可能也會很慢。

如果您想要自定義克隆,那麼Data::Visitor提供了掛鉤功能,而且功能完整,深度克隆是默認行爲。

15

我的印象是,Storable::dclone()是有點規範。

7

Clone可能是你想要的。至少,這就是我見過的所有代碼都使用的。

相關問題