爲什麼這樣的代碼:
x = [[]]*3
x[0].append('a')
x[1].append('b')
x[2].append('c')
x[0]=['d']
print x
打印[[ 'd'],[ '一個',' b','c'],['a','b','c']]?
爲什麼這樣的代碼:
x = [[]]*3
x[0].append('a')
x[1].append('b')
x[2].append('c')
x[0]=['d']
print x
打印[[ 'd'],[ '一個',' b','c'],['a','b','c']]?
這一步是最好的解釋步:
>>> x = [[]]*3 >>> x [[], [], []] >>> x[0].append('a') >>> x [['a'], ['a'], ['a']] >>> x[1].append('b') >>> x [['a', 'b'], ['a', 'b'], ['a', 'b']] >>> x[2].append('c') >>> x [['a', 'b', 'c'], ['a', 'b', 'c'], ['a', 'b', 'c']] >>> x[0]=['d'] >>> x [['d'], ['a', 'b', 'c'], ['a', 'b', 'c']]
第一條語句創建一個具有三個引用其中的相同元素的列表。所以當你修改第一個元素時,你也在修改第二個和第三個元素。因此,附加語句爲列表中的每個元素添加一個數字。
這個問題每天都要問一次......問題似乎是,除非您已經知道發生了什麼,否則您無法搜索解決方案。 – 2012-03-31 13:09:50
爲了禁止這種行爲,最好使用下面的語法創建列表列表:>>> x = [[] for _ in range(3)] – 2012-03-31 15:44:54