哈希映射在Python的字典中传递引用

时间:2019-12-25 06:53:17

标签: python dictionary hashmap pass-by-reference defaultdict

我有两个函数,即func#1和funct#2(Python 3.x),并且都具有相同的返回值。 我是Python的新手,对C / C ++指针的概念了解甚少。除非不是“ 通过引用传递”即指针变量,否则更改一个变量不会反映其他变量。

#<funct#1>

def normalize_vector_list(vector_list):

    normal_vector_list = vector_list

    for idx, vector in enumerate(vector_list):
        vector_normal = cosine_normalization(vector.values())

        for key in vector.keys():
            vector[key] = vector[key]/vector_normal

        normal_vector_list[idx] = vector

    return normal_vector_list



#<funct2>

def normalize_vector_list(vector_list):

    normal_vector_list = vector_list

    for vector in vector_list:
        vector_normal = cosine_normalization(vector.values())

        for key in vector.keys():
            vector[key] = vector[key]/vector_normal

    return normal_vector_list

顺便说一句,上面提到的另一个功能,即 cosine_normalization()是:

def cosine_normalization(vector):

    return math.sqrt(sum(i**2 for i in vector))

输入参数:vector_list

vector_list 是词典的列表,其中紧随 vector_list [0]

{'有争议':3.2988353690005856,'新':0.8321110382957757,'规则':2.57246254081232,'专利':27.617294602624597,'基于计算机的:: 5.993462549770655,'发明':10.075902209486438,'输入':1.7977654932882667,'保留':4.981825347696424,'到期':2.20927915852394,'最后':0.8984861072406485,'分钟':2.5922651681085,'干预':4.607168188650764,'波兰':10.23598762483351}

输出: 输出为归一化vector_list ,其中每个值均通过除以所有值的平方和来归一化。例如。 normal_vector_list [121] 是{'high-speed':0.05849977431100451,'net':0.1026094844409006,'connection':0.232742384495927,'proving':0.060052144835127615,'popular':0.03800614678175985,'ever':0.034539324332692536 ,“报告”:0.026431249541766944,“人物”:0.09935938942455483,“签名”:0.04328893168172482,“宽带”:0.41893629209266864,“最后一个”:0.012408508988158977,“三个”:0.03841976800723183 ......}

1 个答案:

答案 0 :(得分:1)

通过将listdict传递给函数,是在传递实际对象,而不是其副本。

您必须首先创建对象的copy,然后对其进行操作。

import copy

def normalize_vector_list(vector_list):

    normal_vector_list = copy.deepcopy(vector_list)

    for idx, vector in enumerate(vector_list):
        vector_normal = cosine_normalization(vector.values())

        for key in vector.keys():
            vector[key] = vector[key]/vector_normal

        normal_vector_list[idx] = vector

    return normal_vector_list