l =
for i in xrange(10):
print l
l =
a =
for i in xrange(10):
a['num'] = i
print l
輸出結果
```python
# 第一段**
[, , , , , , , , , ]
[, , , , , , , , , ]
## 解答
以上兩段**的本質區別是第乙個是直接傳物件,第二個是傳物件的引用。第一段**給列表新增,是直接新增字典物件,for迴圈中每次新增的物件都是不同的;
第二段**給列表新增的是字典物件的引用(變數a指向這個字典),迴圈過程中,雖然字典物件在變,但a始終指向當前的字典物件,也就是說,先新增到列表的a和後新增到列表的a始終保持一致
## 驗證
為了驗證上述想法,在適當的位置加上列印語句
```python
# 第一段**
l =
for i in xrange(10):
print i # 每次i都不同
print id() # id不同,說明每次迴圈新增的不是同乙個字典
print l
執行結果
0
44042984
144042712
244043800
344043256
444093784
544093512
644094328
744043528
844094600
944094056
[, , , , , , , , , ]
可以看到每次的id都不同,說明新增的是不同的字典物件
```python
040199032
140199032
240199032
340199032
440199032
540199032
640199032
740199032
840199032
940199032
[, , , , , , , , , ]
每次的id都相同,說明新增到列表的是同乙個引用,所以列表裡的10個值必然是相同的
## 小結
有幾點需要注意
- 生成器只有在使用時才取值
- 搞清楚傳的是物件還是物件的引用
面試題 等概率生成器
問題一 已知一隨機發生器,產生0的概率是p,產生1的概率是1 p,現在要你構造乙個發生器,使得它構造0和1的概率均為1 2 構造乙個發生器,使得它構造1 2 3的概率均為1 3 構造乙個發生器,使得它構造1 2 3 n的概率均為1 n,要求複雜度最低。解決方法 原始的隨機數生成器,生成0 的概率為p...
Python面試題之Python生成器
首先說明一下生成器也是迭代器,也有迭代器的那些優點。那為什麼要生成器呢?因為到目前為止都 不是你寫的迭代器,都是別人定義好的。那如何自己去造乙個迭代器呢?下面的內容就會給你答案。想要自己造乙個迭代器,我們可以根據迭代器的特徵 只要乙個物件有 iter 和 next 方法那它就是迭代器 自己定義乙個類...
面試題之二
static全域性變數與普通的全域性變數有什麼區別?static區域性變數和普通的區域性變數有什麼區別?static函式與普通的函式有什麼區別?1 全域性變數 外部變數 的書名之前再冠以static就構成了靜態的全域性變數.全域性變數本身就是靜態儲存方式,靜態全域性變數當然也是靜態儲存方式.這兩者在...