簡體   English   中英

在 Perl 中制作數據結構的深層副本的最佳方法是什么?

[英]What's the best way to make a deep copy of a data structure in Perl?

給定一個數據結構(例如散列的散列),制作深層副本以供立即使用的干凈/推薦的方法是什么? 假設合理的情況,數據不是特別大,不存在復雜的循環,可讀性/可維護性等。 不惜一切代價比速度更重要。

我知道我可以使用StorableClone 、 Clone::More、 Clone::FastData::Dumper等。當前的最佳實踐是什么?

CloneStorable::dclone ,但后者支持更多數據類型。

Clone::FastClone::More如果內存對我來說是正確的,那么幾乎相當,但是功能甚至比克隆更少,而Scalar::Util::Clone支持甚至更少,但對於某些結構來說,IIRC是最快的。

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

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

我不會因為它如此繁瑣和迂回而使用Data::Dumper 它可能會非常緩慢。

對於它的價值,如果你想要可定制的克隆,那么Data::Visitor提供了掛鈎功能,相當完整的功能完全深度克隆是默認行為。

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

克隆可能是你想要的。 至少,這就是我見過的所有代碼所用的內容。

如果您已經在處理 JSON 並在代碼中使用 JSON 模塊,那么快速而骯臟的 hack:將結構轉換為 JSON,然后將 JSON 轉換回結構:

use JSON;

my %hash = (
    obj => {},
    arr => []
);

my $hash_ref_to_hash_copy = from_json(to_json(\%hash));

唯一的缺點可能是不得不處理散列引用而不是純散列,但是,這對我來說已經派上用場了幾次。

嘗試使用Panda :: Lib中的 fclone ,這似乎是最快的(用XS編寫)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM