【发布时间】:2015-11-14 15:58:59
【问题描述】:
【问题讨论】:
标签: python variable-assignment
【问题讨论】:
标签: python variable-assignment
来自Assignment statements documentation:
赋值语句计算表达式列表(请记住,这可以是单个表达式或逗号分隔的列表,后者产生一个元组)并将单个结果对象从左到右分配给每个目标列表。
您有两个分配目标列表; 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
【讨论】:
NameError,a[b] = a, b = {}, 5 工作。
a[b][0] is a 线路 +1。
a, b = {}, 5; a[b] = {}, 5吗?