python呼叫資料返回字典dict資料的現象2
阿新 • • 發佈:2019-01-10
python呼叫資料返回字典dict資料的現象2
思考:
話題1連線:https://www.cnblogs.com/zwgbk/p/10248479.html
在列印和新增時候加上記憶體地址id(),可以檢視結果。可以得出結論:
1、在make()函式裡,生成資料的兩種不同賦值方式。
1.1第一種情況,是在一個記憶體地址生成了一個空的字典。隨後每次呼叫資料時候改變這個記憶體地址的裡的資料。
1.2第二種情況,是在每次呼叫資料的時候,都生成不同記憶體地址的字典。
2、新增進list後,並不是把資料直接儲存在list裡,而是把記憶體地址和相應的方法儲存起來。在需要使用的時候才逐一生成。包括 '記憶體地址:%d' % id(val)
說明:
第一種情況
鍵入程式碼:
1 def make(): 2 dict = { 3 'a': None 4 } 5 for a in range(3): 6 dict['a'] = a 7 yield dict 8 9 list = [] 10 for val in make(): 11 print('新增前字典{},記憶體地址:{}'.format(val,id(val)))12 list.append((val,'記憶體地址:%d' % id(val))) 13 print('新增前字典{},記憶體地址:{}'.format(val,id(val))) 14 15 print(list)
得到結果:
新增前字典{'a': 0},記憶體地址:110911992 新增前字典{'a': 0},記憶體地址:110911992 新增前字典{'a': 1},記憶體地址:110911992 新增前字典{'a': 1},記憶體地址:110911992 新增前字典{'a': 2},記憶體地址:110911992 新增前字典{'a': 2},記憶體地址:110911992 [({'a': 2}, '記憶體地址:110911992'), ({'a': 2}, '記憶體地址:110911992'), ({'a': 2}, '記憶體地址:110911992')]
說明:
第二種情況
鍵入程式碼:
1 def make(): 2 for a in range(3): 3 dict = { 4 'a': a 5 } 6 yield dict 7 8 list = [] 9 for val in make(): 10 print('新增前字典{},記憶體地址:{}'.format(val,id(val))) 11 list.append((val,'記憶體地址:%d' % id(val))) 12 print('新增前字典{},記憶體地址:{}'.format(val,id(val))) 13 14 print(list)
得到結果:
1 新增前字典{'a': 0},記憶體地址:113784728 2 新增前字典{'a': 0},記憶體地址:113784728 3 新增前字典{'a': 1},記憶體地址:110699936 4 新增前字典{'a': 1},記憶體地址:110699936 5 新增前字典{'a': 2},記憶體地址:110699144 6 新增前字典{'a': 2},記憶體地址:110699144 7 [({'a': 0}, '記憶體地址:113784728'), ({'a': 1}, '記憶體地址:110699936'), ({'a': 2}, '記憶體地址:110699144')]