python中变量的内存管理

python中变量的内存管理,python,dictionary,memory-management,Python,Dictionary,Memory Management,我有一个关于python内存管理的问题 我有以下代码: data1 = [ {u'name': u'9_1', u'value': u'sunday'}, {u'name': u'9_1', u'value': u'monday'}, {u'name': u'9_1', u'value': u'wednesday'}, {u'name': u'16_1', u'value': u'monday'}, {u'name': u'16_1', u'value':

我有一个关于python内存管理的问题

我有以下代码:

data1 = [
    {u'name': u'9_1', u'value': u'sunday'},
    {u'name': u'9_1', u'value': u'monday'},
    {u'name': u'9_1', u'value': u'wednesday'},
    {u'name': u'16_1', u'value': u'monday'},
    {u'name': u'16_1', u'value': u'tuesday'},
    {u'name': u'9_2', u'value': u'monday'},
    {u'name': u'9_2', u'value': u'tuesday'},
    {u'name': u'9_2', u'value': u'wednesday'},
    {u'name': u'16_2', u'value': u'tuesday'},
    {u'name': u'16_2', u'value': u'wednesday'},
    {u'name': u'9_3', u'value': u'wednesday'},
    {u'name': u'9_3', u'value': u'saturday'},
    {u'name': u'16_3', u'value': u'thursday'},
    {u'name': u'16_3', u'value': u'saturday'},
    {u'name': u'9_5', u'value': u'monday'},
    {u'name': u'9_5', u'value': u'wednesday'},
    {u'name': u'16_5', u'value': u'monday'},
    {u'name': u'16_5', u'value': u'tuesday'},
    {u'name': u'16_5', u'value': u'wednesday'},
    {u'name': u'17_5', u'value': u''},
    {u'name': u'18_5', u'value': u''}
]
multi_select_ids = ['9', '16']
days_of_week = dict.fromkeys(multi_select_ids,{})
print "before loop:", days_of_week
for data in data1:
    if data['value']:
        name = data['name'].split("_")
        if len(name) > 1:
            ele_id = name[0]
            row_id = name[1]
            if ele_id in multi_select_ids:
                temp = days_of_week[ele_id]
                try:
                    temp[row_id] = temp[row_id] + ',' + data['value']
                except:
                    temp[row_id] = data['value']
print days_of_week
这里python对两个dict使用相同的内存位置,
如何克服这个问题

输出:

{
    '16': {
        u'1': u'sunday,monday,wednesday,monday,tuesday',
        u'2': u'monday,tuesday,wednesday,tuesday,wednesday',
        u'3': u'wednesday,saturday,thursday,saturday',
        u'5': u'monday,wednesday,monday,tuesday,wednesday'
    },
    '9': {
        u'1': u'sunday,monday,wednesday,monday,tuesday',
        u'2': u'monday,tuesday,wednesday,tuesday,wednesday',
        u'3': u'wednesday,saturday,thursday,saturday',
        u'5': u'monday,wednesday,monday,tuesday,wednesday'
    }
}
期望输出:

{
    '16': {
        u'1': u'monday,tuesday',
        u'2': u'tuesday,wednesday',
        u'3': u'thursday,saturday',
        u'5': u'monday,tuesday,wednesday'
    },
    '9': {
        u'1': u'sunday,monday,wednesday',
        u'2': u'monday,tuesday,wednesday',
        u'3': u'wednesday,saturday',
        u'5': u'monday,wednesday'
    }
}

实际上,它们有不同的价值观。这是我从您的代码中获得的输出:

>>> print days_of_week
{'9': {u'1': u'sunday,monday,wednesday,monday,tuesday', u'3': u'wednesday,saturday,thursday,saturday', u'2': u'monday,tuesday,wednesday,tuesday,wednesday', u'5': u'monday,wednesday,monday,tuesday,wednesday'}, '16': {u'1': u'sunday,monday,wednesday,monday,tuesday', u'3': u'wednesday,saturday,thursday,saturday', u'2': u'monday,tuesday,wednesday,tuesday,wednesday', u'5': u'monday,wednesday,monday,tuesday,wednesday'}}
>>> print data1
[{u'name': u'9_1', u'value': u'sunday'}, {u'name': u'9_1', u'value': u'monday'}, {u'name': u'9_1', u'value': u'wednesday'}, {u'name': u'16_1', u'value': u'monday'}, {u'name': u'16_1', u'value': u'tuesday'}, {u'name': u'9_2', u'value': u'monday'}, {u'name': u'9_2', u'value': u'tuesday'}, {u'name': u'9_2', u'value': u'wednesday'}, {u'name': u'16_2', u'value': u'tuesday'}, {u'name': u'16_2', u'value': u'wednesday'}, {u'name': u'9_3', u'value': u'wednesday'}, {u'name': u'9_3', u'value': u'saturday'}, {u'name': u'16_3', u'value': u'thursday'}, {u'name': u'16_3', u'value': u'saturday'}, {u'name': u'9_5', u'value': u'monday'}, {u'name': u'9_5', u'value': u'wednesday'}, {u'name': u'16_5', u'value': u'monday'}, {u'name': u'16_5', u'value': u'tuesday'}, {u'name': u'16_5', u'value': u'wednesday'}, {u'name': u'17_5', u'value': u''}, {u'name': u'18_5', u'value': u''}]

哪两本词典,你怎么知道呢?如果有实际的和期望的结果会很有用。顺便说一句,你的问题实际上与“内存管理”无关;很明显,您正在为原始文件分配引用,而您应该在其中为副本分配引用。在multi_select_ID中,我创建了两个具有9和16个键的DICT,并使用temp变量访问这些DICT,以向这些DICT添加任何数据,因为单个迭代值将同时添加到这两个DICTdicts@Rogalski是的,就这样,;好发现