同福

ValueError: Circular reference detected

介绍

介绍

福哥在使用json.dumps方法将变量转成JSON格式的字符串的时候系统报出了如下错误:

home/topic/2021/0617/17/6a859f5ba06e5579b527c068963f2101.png

代码

这是出问题的代码。

import json

myDict = [
    35,
    "福哥",
    ["Python"]
]
myDictLangs = myDict[2]
myDict[2][0] = myDictLangs

print(json.dumps(myDict))

原因

从字面理解就是检测到了递归引用的情况,递归引用会造成无限死循环的异常,所以无法执行了!

福哥分析代码发现myDict[2]是一个list数组,后面代码对这个子数组下标为0的元素赋值myDictLangs,而myDictLangs和myDict[2]指向是同一块内存,这样肯定会造成死循环了,当然会报错嘛~~

解决

在编写代码的时候记得list、dict、tuple这类变量不能通过赋值创建一个完全独立的变量,需要自行循环复制才可以的。