And*_*rew 25 python variable-assignment
我在Twitter上看到了这个Python片段,并且对输出感到非常困惑:
>>> a, b = a[b] = {}, 5
>>> a
{5: ({...}, 5)}
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?
Mar*_*ers 19
赋值语句计算表达式列表(请记住,这可以是单个表达式或以逗号分隔的列表,后者产生元组)并从左到右将单个结果对象分配给每个目标列表.
你有两个任务目标列表; 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
Run Code Online (Sandbox Code Playgroud)
所以a[b][0]是同一个对象a:
>>> a, b = {}, 5
>>> a[b] = a, b
>>> a
{5: ({...}, 5)}
>>> a[b][0] is a
True
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
816 次 |
| 最近记录: |