flp*_*lpn 2 python dictionary python-3.x
最近看到一段代码,看不懂。这是示例:
a = {}
a['value'] = a
print(a)
>>>> {'value': {...}}
Run Code Online (Sandbox Code Playgroud)
结果,这会创建无限数量的初始 dict 副本,类似于:
{
'value': {
'value': {
'value': {
...
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
那么,为什么会发生这种情况?这是某种递归的东西吗?
您的代码不会复制任何内容。Python 理解您的变量是递归的,也就是说,它引用自身,并且不会尝试永远打印相同的内容。相反,它通过 write 打破了循环引用...。
您可以a["value"]使用is关键字确定这确实不是您字典的副本:
>>> a = {}
>>> a["value"] = a
>>> a["value"] is a # they are the same object
True
>>>
Run Code Online (Sandbox Code Playgroud)