0
我一直在Python中使用[Value] * Count
表示法來初始化列表。例如,[False] * 3
導致創建列表[False, False False]
。我嘗試使用相同的符號來初始化列表的列表。Python列表中可變對象的ID
>>>a = [[0] * 2] * 3
>>>print a
[[0, 0], [0, 0], [0, 0]]
>>>a[0][1] = 23
>>>print a
[[0, 23], [0, 23], [0, 23]]
>>>id(a[0])
139978350226680
>>>id(a[1])
139978350226680
>>>id(a[2])
139978350226680
正如我們可以看到,一個元素是指一個單獨的列表,而不是三次提到三個不同的列表。 1.爲什麼會發生這種情況? 2.什麼是初始化列表清單的正確方法?
同樣的行爲已經指出了以前的答案:https://stackoverflow.com/a/13382804/4716199
「正確的」方法是使用for循環或列表理解。 –
如果你做了'b = [0] * 2; a = [b] * 3'你會驚訝於'a'包含3個對'b'的引用嗎? –
@ PM2Ring這很有道理。我沒有意識到*不會創建新的副本,它只是複製參考。感謝:) – Sidhant