如果您有列出的以下列表:在Python分配中列出的清單列表到另一個列表
>> A = [[1], [2]]
然後說你的第二個列表分配給第一個列表:
>> A[0] = A[1]
你結束了以下內容:
>> print A
[[2], [2]]
所以A [0]和A [1]指向同一個列表了。如果通過追加元素到第一種:
>> A[0].append(3)
您將獲得以下:
>> print A
[[2,3], [2,3]]
但是,如果您嘗試通過刪除第一個列表:
>> del A[0]
然後只刪除一個列表,如下所示:
>> print A
[[1,2]]
Q1.1:爲什麼行爲不同?有人可能會期望這兩個列表被刪除。
顯然,如果一個只想做一個的副本[1],則以下工作正常:
>> A = [[1], [2]]
>> A[0] = list(A[1])
>> print A
[[2], [2]]
>> A[0].append(3)
>> print A
[[2,3], [2]]
這樣做的問題是,它的運行時間與列表的大小線性複製,即A [1]。
Q1.2:在沒有線性時間複製操作的情況下,是否可以從另一個複製列表?
我會說「引用」而不是「身份」;我認爲「參考」是更常用的術語? – Vultaire 2015-04-03 06:42:20
@Vultaire它可能只是在python的[documentation](https://docs.python.org/3.4/reference/datamodel.html)中使用的「identity」,所以我只是使用「identity」來保持它的一致性。 – khajvah 2015-04-03 06:43:56
從@ itzmeontv的回答中,您可以通過id(A [0])來獲取身份值。 – TrainedScarab 2015-04-03 06:49:47