autodataming的个人博客分享 http://blog.sciencenet.cn/u/autodataming

博文

perl hash 的拷贝深拷贝 浅拷贝 deep copy

已有 6691 次阅读 2014-4-10 16:32 |个人分类:DrugDesign|系统分类:科研笔记

看代码猜测结果

my %hasha;
$hasha{1}{'x'}=1;
$hasha{1}{'y'}=1;
$hasha{1}{'z'}=1;
$hasha{2}{'x'}=1;
$hasha{2}{'y'}=2;
$hasha{2}{'z'}=3;

my $num=3;
my %hashbak=%hasha;
while($num--)
{
   %hashb=%hashbak;
   print "$hashb{2}{'x'}\n";
   $hashb{2}{'x'}=10;
   
}

################

结果是1 10 10 而不是1 1 1 因为浅拷贝造成的

###############################################################################


所以我们要深拷贝,这样才能得到一个hash的副本

use Storable qw(dclone);

my %hasha;
$hasha{1}{'x'}=1;
$hasha{1}{'y'}=1;
$hasha{1}{'z'}=1;
$hasha{2}{'x'}=1;
$hasha{2}{'y'}=2;
$hasha{2}{'z'}=3;

my $num=3;
my %hashbak=%hasha;
my %hashb;
while($num--)
{
   %hashb=%{dclone(\%hashbak)};
   print "$hashb{2}{'x'}\n";
   $hashb{2}{'x'}=10;
   
}

#####现在就是deep copy####

##结果就是1 1 1 ##############################################




https://blog.sciencenet.cn/blog-950202-783663.html

上一篇:分子二面角旋转 公式
下一篇:pymol中小分子的叠合 ligand align,atom align,pair_fit
收藏 IP: 245.99.2.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (1 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-4-16 12:55

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部