• Python溢出


    运行程序时遇到报错:

    RecursionError: maximum recursion depth exceeded while calling a Python object

    原因:Python默认递归调用深度为1000(即最多递归调用1000次),而程序在运行过程中超过最大的递归深度。

    为什么最大递归深度要有限制呢?

    本质上讲,在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出。
    在递归调用中,每个函数在调用自己的时候 还没有退出,调用多了肯定会导致内存崩溃,因此需要对递归深度进行限制。

    ## 解决方法(一):

    检查递归代码中是否有结束条件,避免死循环,以及递归结束条件是否合理。一般合理的代码是不会超过默认深度的,如果确实需要更深层的递归,参考解决方法(二)。

    ## 解决方法(二):

    修改默认的递归深度

    import sys  # 导入sys模块
    sys.setrecursionlimit(3000)  # 将默认的递归深度修改为3000
    1
    2
    这个方法虽然也能解决问题,但是治标不治本,规范代码是最重要的。

    如果你写的代码不够合理,需要将递归深度修改得特别大的话,运行程序可能会导致另一个问题:
    StackOverflow(栈区溢出),迫使程序意外终止,即程序结束会看到以下提示:
    Process finished with exit code -1073741571 (0xC00000FD)
    若出现这种情况可以参考下面:

    ————————————————
    版权声明:本文为CSDN博主「改写自己」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/qq_41320433/article/details/104299296

  • 相关阅读:
    Centos7部署jenkins
    查看杀死django进程
    【填坑】python3 manage.py migrate:?: (mysql.W002) MySQL Strict Mode is not set for database connection 'default'
    Amazon S3 加密
    向 Elastic Beanstalk 环境中添加数据库
    Amazon RDS 监控概览
    AWS Lambda 环境变量
    使用 DynamoDB Auto Scaling 自动管理吞吐容量
    使用 Amazon Aurora Auto Scaling 扩展 Aurora 副本
    ECS 服务 Auto Scaling 和 Application Auto Scaling
  • 原文地址:https://www.cnblogs.com/x991788x/p/15209962.html
Copyright © 2020-2023  润新知