2013-05-03 53 views

回答

3

[...]意味着你自我引用變量本身(循環引用):

>>> values = [0, 1, 2] 
>>> sys.getrefcount(values) #two references so far: shell and `values` 
2 
>>> values[1] = values  #created another reference to the same object but a cyclic one 
>>> sys.getrefcount(values) # references increased to 3 
3 
>>> values[1] is values # yes both point to the same obejct 
True 

現在您可以使用valuesvalues[1]

>>> values[1].append(4) 
>>> values 
[0, [...], 2, 4] 
#or 
>>> values[1][1][1].append(5) 
>>> values 
[0, [...], 2, 4, 5] 
2

[...]是一個列表...在這種情況下列表中的列表。

您將第二項值分配給自身,以便插入(或引用)完整值列表。

一個簡短的測試:

values = [0, 1, 2] 
values[1] = values 
print values 
v = values[1] 
print v 
v[1] = 5 
print values 

打印

[0, [...], 2] 
[0, [...], 2] 
[0, 5, 2] 

正如你可以看到,變更值時[1] [1](其中爲v [1]))是不改變該特定的項目,但參考本身,否則它會是[0,[0,5,2],2]。

3

您創建了遞歸引用;您將索引1中的項目替換爲整個列表的參考。

要現在顯示該列表,Python不會而是遞歸到嵌套的引用中,而是顯示[...]

>>> values = [0, 1, 2] 
>>> values[1] = values 
>>> values 
[0, [...], 2] 
>>> values[1] is values 
True 

引用values[1]同樣的事情作爲參考values,你可以做這樣循環往復:

>>> values[1] 
[0, [...], 2] 
>>> values[1][1] is values 
True 
>>> values[1][1] is values[1] 
True