赋值语句评估表达式列表(请记住,它可以是单个表达式或逗号分隔的列表,后者产生一个元组),并将单个结果对象从左到右分配给每个目标列表。
您有两个分配目标列表;a, b
,和a[b]
,该值{}, 5
从左到右分配给这两个目标。
首先,将{}, 5
元组解包到a, b
。您现在有a = {}
和b = 5
。注意这{}
是可变的。
接下来,您将相同的字典和整数分配给a[b]
,其中a
对字典求值,对b
进行求值5
,因此您5
将字典中的键设置为元组,({}, 5)
从而创建了循环引用。将{...}
由此指相同的对象a
已被引用。
由于分配是从左到右进行的,因此您可以将其细分为:
a, b = {}, 5
a[b] = a, b
因此a[b][0]
与以下对象相同a
:
>>> a, b = {}, 5
>>> a[b] = a, b
>>> a
{5: ({...}, 5)}
>>> a[b][0] is a
True