顯示廣告
隱藏 ✕
看板 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)轉錄 同主題: =)首篇 [)上篇 ])下篇