-1

I have a question regarding python memory management.

I have the following code:

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

Here python is using same memory location for both dicts,
How to overcome this issue?

output:

{
    '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'
    }
}

Desired Output:

{
    '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'
    }
}
PM 2Ring
  • 54,345
  • 6
  • 82
  • 182

1 Answers1

0

Actually, they have different values. This is the output I get from your code:

>>> 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''}]
jonrsharpe
  • 115,751
  • 26
  • 228
  • 437
ledermauss
  • 307
  • 1
  • 2
  • 13