看板 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
※ 同主題文章:
Re: 新手再度發問Python list問題
02-17 20:57 SmallBee