这是我的代码:
def getGraphWave(G, d, maxk, p):
data = dict()
output_wavelets = {2:33,5:77,...}
print(len(output_wavelets))
k = [10,20]
for i in k:
S = graphwave(i, output_wavelets)
# size = avgSize(G, S, p, 200)
size = IC(d, S, p)
data[i] = size + i
return data
output_wavelets
是字典,其长度为2000。
但是,运行以下代码时:
def graphwave(k, output_wavelets):
S = []
print(len(output_wavelets))
for i in range(k):
Seed = max(output_wavelets, key=output_wavelets.get)
S.append(Seed)
output_wavelets.pop(Seed)
return S
在getGraphWave(G,D,maxk,p)
中,graphWave(k,output_wavelets)
在循环中运行两次。但是,为什么在graphWave()
中,print(len(output_wavelets))
的结果是2000和1991?
我认为output_wavelets
之前没有更改。以及如何让output_wavelets
始终是原始的?
答案 0 :(得分:0)
首先,您需要了解python如何传递值。实际上,它取决于传递给函数的参数。 就像您传递列表,字典或任何可变对象一样。它可以在函数中进行修改。 但如果您传递元组,字符串或任何不可变的对象,则不会改变。
根据您的情况,您可以复制现有字典,然后对其进行修改。像
CREATE TABLE security_user
(
id INT AUTO_INCREMENT NOT NULL,
email VARCHAR(180) NOT NULL,
roles JSON NOT NULL,
password VARCHAR(255) NOT NULL,
UNIQUE INDEX UNIQ_52825A88E7927C74 (email),
PRIMARY KEY(id)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ENGINE = InnoDB
答案 1 :(得分:0)
当您调用graphwave(i, output_wavelets)
时,会将对 output_wavelets
的引用传递给函数,而不是output_wavelets
的副本。这意味着,当函数修改output_wavelets
字典时,它就是在修改原始字典。
output_wavelets.pop(Seed)
行会从字典中删除项目,因此也会修改您传入的output_wavelets
字典。这就是为什么它会变小的原因!
有多种方法可以解决此问题。最简单(但可能不是最有效)的方法是使用copy.copy()
函数在graphwave
函数的开头创建字典的副本,然后编辑副本而不是原始副本。