了解 Python 多重赋值

Understanding Python multiple assignment

考虑这个赋值语句示例:

>>> x, y = x[y] = {}, None
>>> x
{None: ({...}, None)}
>>> y
>>>

分配给 x 的值是多少,这个分配是如何工作的?

该语句将最右侧的值分配给其左侧的每个目标,从左侧 开始。因此,它相当于

t = {}, None
x, y = t
x[y] = t

因此,t 开始时是一个由空 dict 和值 None.

组成的元组

接下来,我们解包t并将每个部分分配给xyx绑定到空的dict,而y 绑定到 None.

最后,我们也可以将元组分配给 x[y],因为我们刚刚定义了 xyNone 被添加到 x 引用的 dict 中,它的值是原来的元组。因此,我们使 x[y] 引用 x 本身:一个循环!

Python 可以检测到这个循环,所以它将 dict 显示为 {...},而不是试图将其无限扩展到 {None: ({None: ({None: ....