考慮以下幾點:
In [179]: a = [1, 2]
In [180]: a+=a
In [181]: a
Out[181]: [1, 2, 1, 2]
In [182]: a.append(a)
In [183]: a
Out[183]: [1, 2, 1, 2, [...]]
In [184]: a[5]
-----------------------------------------------
IndexError Trace
C:\Users\Marcin\Documents\oneclickcos\oneclickc
----> 1 a[5]
IndexError: list index out of range
In [185]: a[4]
Out[185]: [1, 2, 1, 2, [...]]
In [186]: a[3]
Out[186]: 2
In [187]: a[4]
Out[187]: [1, 2, 1, 2, [...]]
In [188]: a
Out[188]: [1, 2, 1, 2, [...]]
In [189]: a[4][3]
Out[189]: 2
In [190]: a[4][4]
Out[190]: [1, 2, 1, 2, [...]]
In [191]: a[4][5]
-----------------------------------------------
IndexError Trace
C:\Users\Marcin\Documents\oneclickcos\oneclickc
----> 1 a[4][5]
IndexError: list index out of range
In [192]: a[4][4]
Out[192]: [1, 2, 1, 2, [...]]
In [193]: a = [1, 2]
In [194]: a+=a
In [195]: a
Out[195]: [1, 2, 1, 2]
In [196]: a
Out[196]: [1, 2, 1, 2]
In [197]: a
Out[197]: [1, 2, 1, 2]
In [198]: a.append(a)
In [200]: a
Out[200]: [1, 2, 1, 2, [...]]
In [201]: a.append(a)
In [202]: a
Out[202]: [1, 2, 1, 2, [...], [...]]
In [203]: a[4]
Out[203]: [1, 2, 1, 2, [...], [...]]
In [204]: a[5]
Out[204]: [1, 2, 1, 2, [...], [...]]
In [205]: id(a)
Out[205]: 64692680L
In [206]: id(a[5])
Out[206]: 64692680L
In [207]: id(a[4])
Out[207]: 64692680L
In [208]: id(a) == id(a[4]) and id(a[4]) == id(a[5])
Out[208]: True
首先注意的所有+=
不會創建一個省略號列表。
其次,可以看出,省略號-列表指示accesing該時隙將返回完全相同的列表 - 省略號-列表表示的指針外列表(或,幾乎肯定一個外列表如果有多層嵌套)。
http://stackoverflow.com/questions/2347265/what-does-plus-equals-do-in-python – Dogbert 2012-03-20 08:07:27
'a = [1,2]; a + = a'會使'[1,2,1,2]',而不是'[1,2,[1,2]]。看到重複的問題。 – khachik 2012-03-20 08:20:42
所謂的重複不會討論省略號列表* *。 – Marcin 2012-03-20 08:40:53