最近看到一段代码,看不懂。示例如下:
a = {}
a['value'] = a
print(a)
>>>> {'value': {...}}
因此,这会创建无限数量的初始 dict 副本,类似于:
{
'value': {
'value': {
'value': {
...
}
}
}
}
那么,为什么会发生这种情况?这是某种递归的东西吗?
答案 0 :(得分:7)
您的代码不会复制任何内容。 Python 理解您的变量是递归的,也就是说,它引用自身,并且不会尝试永远打印相同的内容。相反,它通过编写 ...
来打破循环引用。
您可以使用 a["value"]
关键字确定 is
确实不是您字典的副本:
>>> a = {}
>>> a["value"] = a
>>> a["value"] is a # they are the same object
True
>>>
答案 1 :(得分:3)
这并不是真正的递归,而更像是一个引用循环。
当你这样做
a['value'] = a
您正在设置相同的字典、相同的对象作为名为“value”的键的配对值。
所以本质上它只是引用自身。重要的是它不会因为无限打印而崩溃,它理解自我引用。
如果您来自许多其他语言,您可能会对 python 感到相当困惑,因为引用被使用了很多。您可以在 documentation 中找到更多阅读材料,oreilly 也有一篇关于其中一些内容的简洁帖子 here。