Re: [問題] 關於list一問
※ 引述《latefall (驚起卻回頭)》之銘言:
: 最近初學python遇到一個list的問題
: 想求板上大大解答
: 我是用python 2.6.5在ubuntu上跑
: 後來在OS X上用python2跑也有一樣的問題
: 如果我寫
: x=[0,0]
: y=[0,0,0]
: for i in range(3):
: x[1]=i
: y[i]=x
: print y
: 輸出是:
: [[0, 2], [0, 2], [0, 2]]
: 如果把y[i]=x那一行改成(其他保持不變)
: y[i]=[x[n] for n in range(2)]
: 輸出變成:
: [[0, 0], [0, 1], [0, 2]]
: 我以為這兩個寫法是等價的?
: 是我有誤解還是這是bug呢?
: 感謝解答
第一種的流程:
步驟 x 值 y 值
===================================================
把 x[1] 設成 0 [0, 0] [0, 0, 0]
把 y[0] 設成 x [0, 0] [[0, 0], 0, 0]
把 x[1] 設成 1 [0, 1] [[0, 1], 0, 0]
把 y[1] 設成 x [0, 1] [[0, 1], [0, 1], 0]
把 x[1] 設成 2 [0, 2] [[0, 2], [0, 2], 0]
把 y[2] 設成 x [0, 2] [[0, 2], [0, 2], [0, 2]]
關鍵在於 Python 的變數和 C(和其它類似語言)中變數的概念並不一樣
在 Python 中, 所有的變數都是參考, 而不是容器
所以例如 y = x 這種述句的作用是「把 y 指向 x 的內容」
當你改變 x 的內容時, y 的內容(也就是 x 的內容)會一起改變
因為 x 和 y 是指向同一個東西, 而非同樣值的兩個獨立物件
至於第二種, 因為 list comprehension 的結果是生成一個新物件
所以在這個作法中 y[0] y[1] 和 y[2] 都分別指向不同的物件
與第一種作法並不等價
--
「我最想要的同伴嘛,首先是要笑口常開,其次是我們能永遠不會發生誤會。
如果這些都能辦到的話,嗯,如果他是世界上第一流的橋手,也還不錯。」
-- 班尼多‧加羅素,前義大利藍隊成員
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.32.81.146
推
03/12 17:16, , 1F
03/12 17:16, 1F
推
03/12 17:20, , 2F
03/12 17:20, 2F
推
03/12 17:39, , 3F
03/12 17:39, 3F
推
03/13 03:09, , 4F
03/13 03:09, 4F
推
03/13 21:38, , 5F
03/13 21:38, 5F
推
03/13 22:30, , 6F
03/13 22:30, 6F
推
03/14 02:29, , 7F
03/14 02:29, 7F
→
03/14 02:31, , 8F
03/14 02:31, 8F
推
03/14 02:41, , 9F
03/14 02:41, 9F
→
03/14 02:44, , 10F
03/14 02:44, 10F
討論串 (同標題文章)
完整討論串 (本文為第 2 之 2 篇):
8
10
Python 近期熱門文章
PTT數位生活區 即時熱門文章