python中的多个分配

时间:2018-09-23 15:48:28

标签: python

在这里我需要清楚的解释。 为什么以下代码有效?

foo1 = foo1[0] = [0]

好的,我知道任务是从左到右完成的。

python如何理解foo1是一个列表?

顺便说一句,我知道foo1最终以[[...]]的第一个元素为自身。

2 个答案:

答案 0 :(得分:29)

因为

foo1 = foo1[0] = [0]

等效于

temp = [0]
foo1 = temp 
foo1[0] = temp 

它首先计算表达式,然后从左到右分配。 逐行分析此行,您将了解发生了什么: -首先在temp中创建一个列表 -然后将列表temp分配给foo1使其成为列表(回答您的实际问题) -第三行只是将第一个元素分配给列表本身(因此,输出中的[[...]])

更新2:将@blhsing评论中的相关问题更改为更相关的讨论:Python Multiple Assignment Statements In One Line

答案 1 :(得分:1)

Python变量根据分配给它的变量的类型知道它们的类型。它是一种动态类型语言。在您的代码中,解释器看到foo1 = foo1[0] = [0],并在末尾查找一个值,即[0]。它是一个包含一个元素0的列表。现在,将其分配给列表foo1foo1[0] = [0]的第一个元素。但是由于foo1已经声明,所以它创建了一个指向自身的指针的对象,因此foo1得到了无限的自我引用,其中最里面的列表为0。

当代码为foo1时,列表foo1 = foo1[0]的结构将相同。

对象foo1已进入无限的自引用循环。