Python:如何理解赋值和引用?

Python:如何理解赋值和引用?,python,variable-assignment,Python,Variable Assignment,python代码部分如下所示: >>> values = [0, 1, 2] >>> values[1] = values >>> values [0, [...], 2] 为什么值是[0,[…],2],什么是..?为什么值不是[0[0,1,2],2]?[…]是一个列表。。。在本例中,列表中的列表 将第二项值指定给自身,以便插入(或引用)完整的值列表 一个简短的测试: values = [0, 1, 2] values[1] = value

python代码部分如下所示:

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

为什么值是
[0,[…],2]
,什么是
..
?为什么值不是
[0[0,1,2],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]。

您创建了一个递归引用;您将索引
1
处的项替换为对整个列表的引用

为了现在显示该列表,Python不会递归到嵌套引用中,而是显示
[…]

>>> values = [0, 1, 2]
>>> values[1] = values
>>> values
[0, [...], 2]
>>> values[1] is values
True
引用
值[1]
与引用
是一样的,您可以无限期地这样做:

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

[…]
表示您将变量自引用到自身(循环引用):

现在,您可以使用
值[1]
修改对象:

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