顯示廣告
隱藏 ✕
看板 Programming
作者 SmallBee (蜜蜂貓)
標題 Re: 新手再度發問Python list問題
時間 2011年02月17日 Thu. PM 08:57:01


硬要解釋是可以套出一個解啦,不過很沒意義就是了

姑且讓我用通用語言(不特定的程式語言)去描述程式運作

假定所有陣列都是一維
&m = m所在的記憶體位址
*m = m值 所指向的記憶體位址

※ 引述《Leon》之銘言:
>>> # case 1
>>> m = [[0,0], [1,1]]
m_0=Array(0,0)
m_1=Array(1,1)
m=Array(&m_0,&m_1)
>>> n = m[:]
n=Array.Copy(m)     =>  n=Array(&m_0,&m_1)
>>> n += [[2, 2]]
n_3=Array(2,2)
Array.Push(n,&n_3)  =>  n=Array(&m_0,&m_1,&n_3)
>>> n
[[0, 0], [1, 1], [2, 2]]
>>> m
[[0,0], [1,1]]
 
>>> #case2
>>> u = [[0, 0], [1, 1]]
u_0=Array(0,0)
u_1=Array(1,1)
u=Array(&u_0,&u_1)
>>> v = u[:]
v=Array.Copy(u)     =>  v=Array(&u_0,&u_1)
>>> u is v
False
>>> v[0] += [2]

Array.Push(*v[0],2)  =>  *v[0]=u_0=Array(0,0,2)
>>> v
[[0, 0, 2], [1, 1]]
>>> u
[[0, 0, 2], [1, 1]]
>>> v is u
False

===================================================

重點是在於陣列如何被建立、儲存與複製
尤其是v=u[:]這個動作到底做了甚麼
必須要理解背後的運作才能夠正確解釋原因

--
※ 作者: SmallBee  時間: 2011-02-17 20:57:01  來自: www.sbh.idv.tw
※ 編輯: SmallBee  時間: 2011-02-17 20:57:50  來自: www.sbh.idv.tw
※ 看板: Programming 文章推薦值: 3 目前人氣: 0 累積人氣: 411 
( ̄︶ ̄)b gradyzhuo 說讚!
1樓 時間: 2011-02-17 23:32:42 (台灣)
  02-17 23:32 TW
喔哦哦~!我竟然看得懂!v跟u是參照到不同的__,可是它們的內容都是參照到同一個__,是嗎?
2樓 時間: 2011-02-17 23:34:15 (台灣)
  02-17 23:34 TW
底線表示我不會表達的詞兒,這樣是不是表示我還沒辦法學的通透?
3樓 時間: 2011-02-18 00:28:59 (台灣)
  02-18 00:28 TW
&v=/=&u but &(&v)[0]=&(&u)[0]的意思,__可以用儲存區塊之類的名詞
4樓 時間: 2011-02-18 08:55:37 (台灣)
  02-18 08:55 TW
建議 按/搜尋point 然後把那串阿德寫的文章看懂 應該會有不少幫助
5樓 時間: 2011-02-18 08:57:25 (台灣)
  02-18 08:57 TW
不能理解的是 u is v 為什麼是看變數的值而不是指向的值= =
6樓 時間: 2011-03-02 23:24:17 (美國)
  03-02 23:24 US
u is v是判斷u、v是否指向同一對象,進行了淺拷貝當然不是了;但它們的內容是相同的,用u==v判斷結果是True
r)回覆 e)編輯 d)刪除 M)收藏 ^x)轉錄 同主題: =)首篇 [)上篇 ])下篇
看板名稱: 確定(Enter) 取消(Esc) 搜尋(Space)
查詢帳號: 確定(Enter) 取消(Esc) 搜尋(Space)
搜尋: m)m文 b)進板 c)未分類 a)作者 /)標題 q)取消?[q]

搜尋 送出(Enter) 取消(Esc)

回覆文章至: f)看板 m)作者信箱 b)兩者皆是 q)取消?[f]
要引用原文嗎? y)引用原文 n)不引用 a)全部回覆 r)複製原文 q)取消?[y]
轉錄本文章於看板: 1)使用連結 2)使用複製 q)取消 ?[1]
轉寄至站內信箱於使用者: 確定(Enter) 取消(Esc)
轉寄至站內信箱於使用者: 確定(Enter) 取消(Esc)
修改文章標題為: 確定(Enter) 取消(Esc)
修改文章標題為: 確定(Enter) 取消(Esc) 全部(a)

確定要刪除這篇文章?(可按大U救回) 確定(Enter) 取消(Esc)

刪除理由:

確定(Enter) 取消(Esc)
加到這個分類: 確定(Enter) 下一層(→) 回上層(←) 取消(Esc)
你覺得這篇文章: 1)真讚 2)真瞎 q)取消?[1] (再選一次即可收回)
你覺得這篇文章: 1)值得推薦 2)表示反對 3)單純註解 q)取消?[3]
guest
預覽(Enter) 取消(Esc)
上傳圖片
按ctrl+Enter可輸入下一行。
guest
確定要送出? 確定(Enter) 取消(Esc) 繼續(e)
搜尋: 送出(Enter) 取消(Esc)

▏▎▍▌▋▊▉ 請按任意鍵繼續