1. 程式人生 > >python呼叫資料返回字典dict資料的現象2

python呼叫資料返回字典dict資料的現象2

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