2013-05-03 21 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