看板 Programming
作者 標題 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
※ 同主題文章:
02-16 01:30 □ 新手再度發問Python list問題
● 02-17 20:57 Re 新手再度發問Python list問題
09-23 02:40 Re 新手再度發問Python list問題
02-17 22:27 Re 新手再度發問Python list問題
※ 看板: Programming 文章推薦值: 3 目前人氣: 0 累積人氣: 411
( ̄︶ ̄)b gradyzhuo 說讚!
1樓 時間: 2011-02-17 23:32:42 (台灣)
推
02-17 23:32 TW
喔哦哦~!我竟然看得懂!v跟u是參照到不同的__,可是它們的內容都是參照到同一個__,是嗎?
3樓 時間: 2011-02-18 00:28:59 (台灣)
→
02-18 00:28 TW
&v=/=&u but &(&v)[0]=&(&u)[0]的意思,__可以用儲存區塊之類的名詞
6樓 時間: 2011-03-02 23:24:17 (美國)
→
03-02 23:24 US
u is v是判斷u、v是否指向同一對象,進行了淺拷貝當然不是了;但它們的內容是相同的,用u==v判斷結果是True
回列表(←)
分享