###前提・実現したいこと
HITSアルゴリズムの計算プログラムを、以下のPythonソースコードのように実装したのですが、これを実行すると、HITSの引数として渡したHUBS,AUTHSの中身まで書き換えられてしまうのですが、どうしてでしょうか?HITSの最初で引数HUBS,AUTHSとローカル変数hubs,authsを区別できるようにしたはずなのですが・・・どなたか、解説をお願い致しますm(_ _)m
###該当のソースコード
Python
1import math 2from math import sqrt 3 4def init(): 5 hubs=[('a',1),('b',1),('c',1)] 6 auts=[('d',1),('e',1),('f',1)] 7 return hubs,auts 8 9hubs,auths=init() 10links=[('a','d'),('a','e'),('a','f'),('b','d'),('b','e'),('c','d')] 11 12def HITS(HUBS,AUTHS,links): 13 hubs=HUBS 14 auths=AUTHS 15 asum=0 16 hsum=0 17 for i in range(len(auths)): 18 asum=sum(h[1] for h in hubs if (h[0],auths[i][0]) in links) 19 auths[i]=(auths[i][0],asum) 20 for i in range(len(hubs)): 21 hsum=sum(a[1] for a in auths if (hubs[i][0],a[0]) in links) 22 hubs[i]=(hubs[i][0],hsum) 23 return hubs,auths
###発生している問題・エラーメッセージ
>>> hubs,auths=init() >>> hubs [('a', 1), ('b', 1), ('c', 1)] >>> auths [('d', 1), ('e', 1), ('f', 1)] >>> next_hubs,next_auths=HITS2(hubs,auths,links) >>> next_hubs [('a', 6), ('b', 5), ('c', 3)] >>> next_auths [('d', 3), ('e', 2), ('f', 1)] >>> hubs **[('a', 6), ('b', 5), ('c', 3)]**//ここは変わってほしくない >>> auths **[('d', 3), ('e', 2), ('f', 1)]**//ここも変わってほしくない
###試したこと
hubs,authsの要素をタプルにしたり長さ2の配列にしたり、色々試しましたが、やはりHITSの引数として渡したHUBS,AUTHSの中身まで変わってしまいます・・・
###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/06/23 04:47
2016/06/23 04:56
2016/06/23 05:02