将 dict 值设置为自身会创建无限副本

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)

那么,为什么会发生这种情况?这是某种递归的东西吗?

Ekr*_*çel 7

您的代码不会复制任何内容。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)

  • ``a["val"]`` **是** ``a``,打印它们没有任何区别。如果*您*正在递归地访问字典的键,那么Python只会执行您所说的操作。 (3认同)