2011-06-01 52 views
2

下面的代碼給出了c和d不同的值,當我打印出來爲什麼這兩個值不同時,我分配給另一個?

import csv 

datafile = open('test1.csv', 'r') 
datareader = csv.reader(datafile) 
c = [] 
for row in datareader: 
    c.append(row) 

d = [[0]*2]*2 
i=0 

while i < 2: 

    j=0 

    while j < 2: 

     d[i][j] = float(c[i][j]) 

     j=j+1 
    i=i+1 

print(c) 
print(d) 
+1

你能提供示例輸出嗎? – garnertb 2011-06-01 13:55:46

+0

你會得到什麼? – jammon 2011-06-01 13:56:36

+0

這實際上取決於test1.csv的內容。結果是什麼?這些值如何不同? – viraptor 2011-06-01 13:56:50

回答

7

這條線:

d = [[0]*2]*2 

不會創建內部列表的副本,它只是創建多個引用同一個列表。將其替換爲明確聲明:

d = [[0, 0], [0, 0]] 
+0

謝謝,我在我的問題中展示的例子是實際問題的簡明版本。在我的實際代碼d = [[0] * 40] * 1000。是否有更簡單的方法來爲40x1000列表進行顯式聲明? – Mandeep 2011-06-01 14:14:52

+1

'[[i爲範圍(40)]中的[j爲範圍(1000)]' – jammon 2011-06-01 14:22:28

+0

感謝,非常有幫助 – Mandeep 2011-06-01 14:24:16

1

列表是可變元素。當您執行諸如[[0]]*10之類的操作時,不會創建多個列表,但會創建10個對同一對象的引用。

相關問題