2012-02-01 51 views
4

我遇到了一段python list decclaration。我對它的行爲有些困惑。 可以somone請解釋一下。感謝你的幫助。var = [[0] * 5] * 5幫助理解python列表?

>>> v = [[0]*2]*2 
    >>> v 
    [[0, 0], [0, 0]] 
    >>> v[1][1] = 23 
    >>> v 
    [[0, 23], [0, 23]] 
    >>> v[1][1] = 44 
    >>> v 
    [[0, 44], [0, 44]] 
    >>> 

回答

7

*運營商列表中重複的內容,你可以在輸出中清楚地看到。

但是,它不復制元素,它只是複製對象引用。因此,在這種情況下,[0,0 ] s都具有相同的基礎列表對象,這應該解釋這種現象。

要驗證這一點,請嘗試v[0] = [0,44]爲主列表的第一個元素分配一個新的(因此獨立!)列表對象;然後重新嘗試更換v[1][1]。這次在輸出中只有一個條目會改變。

+0

解釋它,那麼它如何修復? – vindyz 2012-02-01 00:38:00

+1

例如,'[[0] * 2 for n in range(M)]'產生一個包含m個獨立元素'[0,0]'的列表。「 – 2012-02-01 00:39:28

+0

@vinay:通過使用類似'v = [[0] * 2的範圍(0,2)]'' – Yuushi 2012-02-01 00:40:38

0

v只是一個列表清單。

的*事第一行意思是「重複我的列表中2次0]因此,每個巢列表的大小爲2的和包含零

然後你只需設定值,以你的列表清單的某些細胞。: )