为什么Python同时使用引用计数和标记-清除来进行GC?

2023-12-24

我的问题是为什么 python 同时使用引用计数和标记和清除来进行GC?为什么不只是标记和清除?

我最初的猜测是,使用引用计数可以轻松删除非循环引用的对象,这可能会在一定程度上加快标记和清除速度并立即获得内存。不知道我的猜测是否正确?

有什么想法吗?

多谢。


Python(语言)没有说明它使用哪种形式的垃圾收集。主要实现(通常称为 CPython)如您所描述的那样。其他版本(例如 Jython 或 IronPython)使用纯粹的垃圾收集系统。

是的,通过引用计数进行早期收集有一个好处,但 CPython 使用它的主要原因是历史性的。最初没有针对循环对象的垃圾回收,因此循环导致内存泄漏。 C API 和数据结构很大程度上基于引用计数原理。添加真正的垃圾收集后,无法破坏现有的二进制 API 以及依赖它们的所有库,因此必须保留引用计数。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么Python同时使用引用计数和标记-清除来进行GC? 的相关文章

  • 没有名为 crypto.cipher 的模块

    我现在正在尝试加密一段时间 我最近得到了这个基于 python 的密码器 名为PythonCrypter https github com jbertman PythonCrypter 我对 Python 相当陌生 当我尝试通过终端打开 C
  • Python 中的 Lanczos 插值与 2D 图像

    我尝试重新缩放 2D 图像 灰度 图像大小为 256x256 所需输出为 224x224 像素值范围从 0 到 1300 我尝试了两种使用 Lanczos 插值来重新调整它们的方法 首先使用PIL图像 import numpy as np
  • 将数据从 python pandas 数据框导出或写入 MS Access 表

    我正在尝试将数据从 python pandas 数据框导出到现有的 MS Access 表 我想用已更新的数据替换 MS Access 表 在 python 中 我尝试使用 pandas to sql 但收到错误消息 我觉得很奇怪 使用 p
  • 使 django 服务器可以在 LAN 中访问

    我已经安装了Django服务器 可以如下访问 http localhost 8000 get sms http 127 0 0 1 8000 get sms 假设我的IP是x x x x 当我这样做时 从同一网络下的另一台电脑 my ip
  • 如何在flask中使用g.user全局

    据我了解 Flask 中的 g 变量 它应该为我提供一个全局位置来存储数据 例如登录后保存当前用户 它是否正确 我希望我的导航在登录后在整个网站上显示我的用户名 我的观点包含 from Flask import g among other
  • Flask 会话变量

    我正在用 Flask 编写一个小型网络应用程序 当两个用户 在同一网络下 尝试使用应用程序时 我遇到会话变量问题 这是代码 import os from flask import Flask request render template
  • 如何使用Conda下载python包并随后离线安装?

    我知道通过 pip 我可以使用以下命令下载 Python 包 但 pip install 破坏了我的内部包依赖关系 当我做 pip download
  • 使用 on_bad_lines 将 pandas.read_csv 中的无效行写入文件

    我有一个 CSV 文件 我正在使用 Python 来解析该文件 我发现文件中的某些行具有不同的列数 001 Snow Jon 19801201 002 Crom Jake 19920103 003 Wise Frank 19880303 l
  • Python 函数可以从作用域之外赋予新属性吗?

    我不知道你可以这样做 def tom print tom s locals locals def dick z print z name z name z guest Harry print z guest z guest print di
  • 如何加速Python中的N维区间树?

    考虑以下问题 给定一组n间隔和一组m浮点数 对于每个浮点数 确定包含该浮点数的区间子集 这个问题已经通过构建一个解决区间树 https en wikipedia org wiki Interval tree 或称为范围树或线段树 已经针对一
  • 如何在Python中获取葡萄牙语字符?

    我正在研究葡萄牙语 角色看起来很奇怪 我怎样才能解决这个问题 代码 import feedparser import random Vou definir os feeds feeds conf feedurl http pplware s
  • Pygame:有没有简单的方法可以找到按下的任何字母数字的字母/数字?

    我目前正在开发的游戏需要让人们以自己的名义在高分板上计时 我对如何处理按键有点熟悉 但我只处理过寻找特定的按键 有没有一种简单的方法可以按下任意键的字母 而不必执行以下操作 for event in pygame event get if
  • 在f字符串中转义字符[重复]

    这个问题在这里已经有答案了 我遇到了以下问题f string gt gt gt a hello how to print hello gt gt gt f a a gt gt gt f a File
  • 使用 \r 并打印一些文本后如何清除控制台中的一行?

    对于我当前的项目 有一些代码很慢并且我无法使其更快 为了获得一些关于已完成 必须完成多少的反馈 我创建了一个进度片段 您可以在下面看到 当你看到最后一行时 sys stdout write r100 80 n I use 80覆盖最终剩余的
  • Fabric env.roledefs 未按预期运行

    On the 面料网站 http docs fabfile org en 1 10 usage execution html 给出这个例子 from fabric api import env env roledefs web hosts
  • 将图像分割成多个网格

    我使用下面的代码将图像分割成网格的 20 个相等的部分 import cv2 im cv2 imread apple jpg im cv2 resize im 1000 500 imgwidth im shape 0 imgheight i
  • 为字典中的一个键附加多个值[重复]

    这个问题在这里已经有答案了 我是 python 新手 我有每年的年份和值列表 我想要做的是检查字典中是否已存在该年份 如果存在 则将该值附加到特定键的值列表中 例如 我有一个年份列表 并且每年都有一个值 2010 2 2009 4 1989
  • 使用 Python 绘制 2D 核密度估计

    I would like to plot a 2D kernel density estimation I find the seaborn package very useful here However after searching
  • Rocket UniData/UniVerse:ODBC 无法分配足够的内存

    每当我尝试使用pyodbc连接到 Rocket UniData UniVerse 数据时我不断遇到错误 pyodbc Error 00000 00000 Rocket U2 U2ODBC 0302810 Unable to allocate
  • 如何使用 Pycharm 安装 tkinter? [复制]

    这个问题在这里已经有答案了 I used sudo apt get install python3 6 tk而且效果很好 如果我在终端中打开 python Tkinter 就可以工作 但我无法将其安装在我的 Pycharm 项目上 pip

随机推荐

  • 以内存高效的方式将大型 csv 读入稀疏 pandas 数据帧

    熊猫read csv函数似乎没有稀疏选项 我有 csv 数据 里面有很多零 它压缩得很好 并且去掉了任何0值将其减小到几乎原始大小的一半 我尝试先将其加载到密集矩阵中read csv然后打电话to sparse 但它需要很长时间并且在文本字
  • 如何在 div 元素内水平居中图像?

    如何在容器 div 内居中对齐 水平 图像 这是 HTML 和 CSS 我还添加了缩略图其他元素的 CSS 它按降序运行 因此最高的元素是所有内容的容器 最低的元素位于所有内容的内部 thumbnailwrapper color 2A2A2
  • 绕点 xna 2D 旋转

    我正在尝试围绕另一个对象 半圆形纹理 旋转一个对象 框纹理 我不知道从哪里开始 如果有人能帮助我 我将不胜感激 http msdn microsoft com en us library ff433988 aspx http msdn mi
  • QT4:如何重新启动应用程序?重新设置? [复制]

    这个问题在这里已经有答案了 1 我想重新启动我的 QT4 应用程序 只是同一应用程序的正常关闭和启动 2 为什么 好吧 我需要一个选项来 重置 一切 重新启动应用程序似乎是最简单的方法 问题是 有很多课程和一切 我没有时间将它们的每个设置恢
  • 如何比较两个图像?

    public void winCheck if button1 Image img1 w1 P2 button1 Image new Bitmap win cross png button2 Image new Bitmap win cro
  • 在刀片模板中包含 css 文件吗?

    我想在我的 Laravel Blade 模板中包含一个 css 文件 我试过了 include public path css styles css 但它说视图不存在 它确实存在 如何包含 css 文件 请注意 我知道这不是链接 css 文
  • JavaScript 回调函数中的变量范围

    我预计下面的代码会警告 0 和 1 但它警告 2 两次 我不明白原因 不知道是不是jquery的问题 另外 如果这篇文章的标题和标签不准确 请帮助我编辑
  • 如何用不同的标记绘制多条线

    我想绘制多条线MATLAB http en wikipedia org wiki MATLAB这样做 每一行的标记都会不同 我知道通过颜色可以实现这一点ColorSet hsv 12 有没有像这种简单的标记方法 好吧 我不知道内置功能MAT
  • 检测文本中的信用卡号

    我正在尝试找到一种组件或方法来检测文本中不同类型的信用卡号码 我找到了很多有关验证信用卡号的信息 但我需要能够获取文本正文 例如网页并检查是否存在信用卡号 银行帐号和 或排序代码 有谁知道有一个可以帮助商业或其他方面的组件吗 具体来说 我的
  • 黑莓表视图

    这是我的应用程序 如何在下面添加表格视图或网格 我应该画所有东西吗请帮忙 这是我的代码 import net rim device api ui import net rim device api ui component import n
  • Bash 中的 if、elif、else 语句问题

    我似乎无法弄清楚以下问题是什么if声明是关于elif and then 请记住printf仍在开发中 我只是还无法在声明中对其进行测试 因此很可能是错误的 我收到的错误是 timezone string sh line 14 syntax
  • 如何在 SwiftUI 中的文本末尾添加按钮?

    我想在游戏中心设置中创建一个类似于 Apple 的 UI 其中文本末尾有一个可点击的链接 我正在使用 SwiftUI 我尝试结合Text and Button有几个方面 Form Text A social gaming service t
  • PHP - 如何在没有 API 访问令牌的情况下从 Instagram 获取图像

    我可以在没有 Instagram API 或访问令牌的情况下从 Instagram 个人资料获取图像吗 您可以获得所有图像 只需迭代它们page info 另外 还有更方便的获取json的方式 otherPage nasa profileU
  • 如何在 javascript 中实现 C# 访问修饰符?

    Summary 我尝试在 javascript 中正确实现继承和封装 就像在基于类的语言 例如 c 中一样 丑陋的部分是受保护的成员在私有实例中有多个副本 这些副本只能通过闭包访问 除了将这些成员刷新到私有实例之外我没有任何想法 如果可以的
  • 由于连接字符串不正确,连接到 Azure MySQL 服务器失败

    当尝试从 mysql 客户端连接到 Azure 中的 MySQL 服务器时 即使我使用正确的用户名和服务器名称 也会收到以下错误 我怎样才能解决这个问题 连接字符串可能不正确 请访问门户网站以获取参考 连接到 Azure Database
  • JTable:覆盖 CTRL+C 行为

    I have a JTable set on SINGLE SELECTION mode i e the user can only select one row at a time I am trying to override the
  • 在常规 Maven 构建中使用 Eclipse p2 存储库中的依赖项?

    我想在 常规 Maven 3 构建 例如 JAR 或 WAR 打包 中使用来自远程 Eclipse p2 存储库的依赖项 所有这些都无需将 p2 存储库转换为本地 Maven 存储库 这就是 osgi to maven2 和m4e 似乎可以
  • React 在状态更改后不重新渲染,如何设置子组件的状态?

    Problem 我将立法者集合放入表中 字段标题是按钮 并附加了单击事件 通过单击的字段按钮对集合进行排序 render const legislatorList this populateList creates an Array of
  • javascript 仅当选项卡/浏览器窗口聚焦时才应运行[重复]

    这个问题在这里已经有答案了 可能的重复 检测浏览器选项卡是否具有焦点 https stackoverflow com questions 7389328 detect if browser tab has focus 我有一个简单的java
  • 为什么Python同时使用引用计数和标记-清除来进行GC?

    我的问题是为什么 python 同时使用引用计数和标记和清除来进行GC 为什么不只是标记和清除 我最初的猜测是 使用引用计数可以轻松删除非循环引用的对象 这可能会在一定程度上加快标记和清除速度并立即获得内存 不知道我的猜测是否正确 有什么想