当前位置: 首页 > news >正文

python的内存管理

目录

1. 引用计数

2. 垃圾收集(GC)


python的内存管理主要是引用计数和垃圾回收器来进行内存管理

1. 引用计数

每个 Python 对象都有一个引用计数,当引用计数为零时,对象的内存会被释放。

import sys

a = []  # 创建一个空列表对象,引用计数为 1
print(sys.getrefcount(a))  # 输出引用计数,应该是 2(包括传递给 getrefcount 的参数引用)

b = a   # 现在 'a' 和 'b' 都引用同一个列表对象,引用计数增加到 2
print(sys.getrefcount(a))  # 输出引用计数,应该是 3

del a   # 删除 'a' 的引用,引用计数减少到 2
print(sys.getrefcount(b))  # 输出引用计数,应该是 2

del b   # 删除 'b' 的引用,引用计数减少到 1
# 当引用计数降为 0 时,列表对象的内存会被释放

2. 垃圾收集(GC)

Python 的垃圾收集器用来处理循环引用的情况,即两个或多个对象互相引用,导致引用计数永远不会归零。

import gc

class Node:
    def __init__(self, value):
        self.value = value
        self.next = None

def create_cycle():
    a = Node(1)
    b = Node(2)
    a.next = b
    b.next = a  # 创建循环引用
    return a, b

a, b = create_cycle()
del a
del b
# 由于循环引用,a 和 b 无法通过引用计数自动释放
gc.collect()  # 手动调用垃圾收集器
# 垃圾收集器会检测到循环引用,并释放这些对象的内存

http://www.dtcms.com/a/99197.html

相关文章:

  • Knife4j 接口文档使用流程分析
  • 7.3 主成分分析(PCA)
  • Python切片中的步长秘密
  • Python 序列构成的数组(切片)
  • sqli-labs靶场 less 10
  • prometheus+grafana监控虚拟机实操
  • Windows 11 VS Code C/C++ 开发环境搭建——一种尽量“绿色”的方法
  • defconfig配置宏的规则
  • C. Assembly via Minimums
  • 一种C# Winform的UI处理
  • Python第六章18:数据容器的通用操作
  • 简单ELK框架搭建
  • 为pip设置国内镜像源
  • Android Jetpack学习总结(源码级理解)
  • 明达IOT 平台助推纺织龙头实现智能管理
  • 动态规划篇(数位统计DP)
  • 用空闲时间做了一个小程序-二维码生成器
  • 【安全】nginx防止host头攻击
  • c++弱指针实现原理
  • Python小练习系列 Vol.5:数独求解(经典回溯 + 剪枝)
  • Linux之基础知识
  • 深度学习处理时间序列(5)
  • 《新凯来:半导体设备制造领域的“国家队”》
  • 【愚公系列】《高效使用DeepSeek》039-政务工作辅助
  • LeetCode 2360.图中的最长环:一步一打卡(不撞南墙不回头) - 通过故事讲道理
  • Redis延时队列在订单超时未报到场景的应用分享
  • 【数据结构】二叉树 — 经典OJ面试题剖析!!!
  • 关于 websocket协议的理解
  • 001 - 前缀和算法:从原理到实战,一文讲透区间和问题
  • 谈谈Minor GC、Major GC和Full GC