看板 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
( ̄︶ ̄)b gradyzhuo 說讚!
SmallBee: Re: 新手再度發問Python list問題 - Programming板