Laravel  
laravel
文档
数据库
架构
入门
php技术
    
Laravelphp
laravel / php / java / vue / mysql / linux / python / javascript / html / css / c++ / c#

python 内存泄漏

作者:步尘の若云   发布日期:2025-10-17   浏览:47

# 示例代码:Python 内存泄漏

import sys
import gc

class MyClass:
    def __init__(self, name):
        self.name = name
        self.ref = None

def create_cycle():
    a = MyClass("Object A")
    b = MyClass("Object B")

    # 创建一个循环引用
    a.ref = b
    b.ref = a

    # 没有其他引用指向 a 和 b,但它们互相引用,导致垃圾回收器无法回收
    return a, b

def main():
    print("Creating reference cycles...")
    for _ in range(10000):
        create_cycle()

    # 手动触发垃圾回收
    gc.collect()

    # 检查剩余对象数量
    print(f"Number of objects: {len(gc.get_objects())}")

if __name__ == "__main__":
    main()

解释说明:

  1. 循环引用:在 create_cycle 函数中,我们创建了两个对象 ab,它们相互引用。由于 Python 的垃圾回收机制(基于引用计数和周期性垃圾回收),这些对象不会被立即回收,从而可能导致内存泄漏。

  2. 手动触发垃圾回收:通过调用 gc.collect(),我们可以手动触发垃圾回收器来清理未被引用的对象。

  3. 检查对象数量:使用 gc.get_objects() 可以查看当前内存中的对象数量,帮助我们判断是否有内存泄漏。

  4. 内存泄漏的原因:在这个例子中,虽然 ab 没有外部引用,但由于它们之间的循环引用,垃圾回收器无法自动回收它们,直到我们手动调用 gc.collect()

如果你需要更复杂的内存泄漏场景或不同的示例,请告诉我!

上一篇:python获取路径的最后一级

下一篇:python endswith函数用法

大家都在看

python时间格式

python读取文件路径

staticmethod在python中有

python开发windows应用程序

python中len是什么意思

python ord和chr

python中的yield

python自定义异常

python判断路径是否存在

python list.pop

Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3

Laravel 中文站