2016-07-05 61 views
-1

我有一個關於python內存管理的問題。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是使用相同的內存位置兩種類型的字典,
如何克服這個問題?

輸出:

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

哪兩個字典,你怎麼知道? – DeepSpace

+0

對實際的和想要的輸出有用 – abimelex

+2

順便提一下,你的問題與*「內存管理」*無關;您明顯將引用分配給原來的某處,而您應該將引用分配給*副本*。 – jonrsharpe

回答

0

其實,他們有不同的價值觀。這是我從你的代碼得到的輸出:

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