奇怪?我的 Python 代码里面出现了薛定谔的 Bug

MoE混合专家架构原理与工程实践:解密大模型千亿参数调度机制 混合专家(MoE)是一种稀疏化模型架构范式,其核心在于通过路由器动态选择少量专家子网络参与前向计算,从而在保持模型容量的同时显著降低单次推理的计算开销与显存占用。该机制突破了传统稠密模型‘全参数参与’的固有瓶颈,实现了参数规模与实际激活量的解耦——如GPT-4总参1.8万亿但每token仅激活约360亿,DeepSeek-R1以6710亿总参实现370亿激活。MoE的技术价值不仅体现为FLOPs压缩与延迟可控,更在于支持细粒度能力分工、负载均衡调度及跨GPU高效扩展。当前已广泛应用于开源大模型(Mixtra 阅读详情

GNE: 新闻网页正文通用抽取器更新了0.2.1版本,大幅度提高了正文的提取速度。在开发这个版本的时候,我遇到了一个非常奇怪的 Bug,最终发现是由于垃圾回收机制和内存重用机制导致的。今天我们来看看这个问题。

 

问题背景

先来看一段代码:

 

 

这段代码读取tests/163/9.html这个文件里面的 HTML 代码,分别获取 <body> 下面的所有标签内部的所有<a>标签中的文本。说起来可能有点绕口,我举个例子。


 

 

<body> <div> <a href="/xx">你好</a> </div> <h2> <a>世界</a> </h2> </body> 复制代码

分别获取<div>标签和<h2>标签下面的<a>标签中的文本,也就是你好和世界。

但这段代码有个问题,就是对于嵌套结构的标签,会重复提取。例如:


 

 

<body> <div> <h2> <a href="/xx">你好</a> </h2> </div> </body> 复制代码

首先,获取<div>标签下面的<a>标签,获取到的是你好所在的<a>标签。但是,获取<h2>标签下面的<a>标签时,获取的仍然是同一个<a>标签。

这样一来,在上图代码里面第15-20行就会重复执行两次。

这里多说一句,小编是一名python开发工程师,这里有我自己整理的一套最新的python系统学习教程,包括从基础的python脚本到web开发、爬虫、数据分析、数据可视化、机器学习等。想要这些资料的可以关注小编,并在后台私信小编领取。

 

 

为了提高代码的运行效率,我们引入缓存,记录每一个<a>标签的分析结果,如果发现一个<a>标签已经被分析了,就直接使用缓存的结果,避免重复分析。

于是,代码修改成下面这样:

 

 

代码第18行的str(element)对应了这个节点的内存地址,如下图所示:

 

 

这段代码看起来似乎没有什么问题,但在实际提取数据的时候,发现提取的结果不太正常。

 

薛定谔的 Element

为了调试这个问题,我对代码做了一下修改:

 

 

可以看到,同一个 HTML 标签,之前缓存的结果竟然跟新提取的不一样。

于是,我想看看每次提取的时候,对应的 element 是哪个,但却发生了更诡异的事情,我们做一个看起来对代码不会有任何影响的改动:

 

 

图4里面,我们直接把element_text_list缓存起来。图5里面,我们把[element_text_list, element]缓存起来,读取的时候,读取这个列表的下标为0的元素。也就是说,这个缓存的element我们根本不使用。

但奇怪的事情就这样发生了,问题消失了!在图4大量打印的同一个标签,缓存的数据跟提取的数据不一致!,在图5里面却一条都没有打印。这样修改以后,GNE 的提取的结果就正确了。

但为什么会发生这种事情呢?难道说跟缓存的结果有关系?那么我们把列表里面的 element改成其他数据看看:

 

 

仅仅是把element改成了数字1,Bug 又出现了。

它似乎知道我在试图去观察它,当我尝试用代码去观察 element时,它就一切正常。当我不观察它时,它就会出问题。薛定谔的 element。

 

看不见的手

遇事不决,量子力学。这个问题跟量子力学实际上没有关系。导致这个诡异情况发生的原因,是一个一直运行在 Python 里面,但是你常常忽略的机制——垃圾回收。

Python 会把不再使用的对象清理掉,从而释放内存。当我们执行一个 for 循环时:


 

 

for element in element_list: a = element.xpath('//xxx') b = element.xpath('.//text()') c = 1 + 1 复制代码

循环第一次执行的时候,生成第一个element对象,但是这个对象在循环第二次执行的时候就被新的element对象覆盖了。因为没有其他地方继续使用第一个 element 对象,它的引用计数归零,Python 的垃圾回收机制就会把它清理掉。它占用的内存空间也会被释放出来。

但如果换一种写法:


 

 

cache = [] for element in element_list: a = element.xpath('//xxx') b = element.xpath('.//text()') c = 1 + 1 cache.append(element) 复制代码

由于列表cache中包含了对每个 element 对象的引用,导致第一次循环生成的element对象的引用计数不为0,垃圾回收机制不会回收它,它始终占用了一块内存区域。这块区域不会被其他数据使用。那么每次循环,新的element对象都会新申请一块内存区域来存放数据,于是就等价于每一个不同的 element 节点对应了不同的内存地址。

在示例代码里面,大家注意element_flag = str(element)这一行,它的值类似于<Element a at 0x1087ba638>,这里的十六进制数字0x1087ba638对应了这个对象在内存里面的地址。

一开始,我有一个不正确的假设,我以为str(element)的值,对应的 HTML 里面的每个节点。同一个节点,多次执行,结果都一样,不同的节点,多次执行,结果都不一样。

但实际上这是不正确的。因为如果前一个节点的内存区域被垃圾回收了,那么这个区域会被重新分配,新来的节点可能碰巧会放到这个地方,这就导致两个不同的 <a> 标签,当你执行str(element)时,他们打印出来的结果都是相同的。但是实际上他们的正文不一样。

而当我使用element_text_cache[element_flag] = [element_text_list, element]时,由于每个element对象不会被回收,于是就不会出现不同的节点互相覆盖的问题,所以它的工作就符合了预期。

 

解决问题

所以,bug 的根本原因在于,我不应该使用str(element)作为缓存的 Key,应该找一个跟 HTML 节点一一对应的东西来作为 Key。显然,使用 XPath 更好。

于是,修改代码,把element_flag改成 XPath:

 

 

问题得以解决。

 

本文章素材来源于网络,如有侵权请联系删除。

大模型自我演进技术:运行时动态纠错与可信增强 大模型自我演进是指模型在推理过程中实时感知输出风险、自主触发修正机制的能力,其核心原理在于对隐状态置信度、逻辑一致性与语义漂移的毫秒级诊断。相比传统依赖人类反馈的离线微调,该技术通过轻量级状态评估头与确定性微演进协议,实现可控、可解释、低开销的在线适应,显著提升高可靠性AI系统(如金融合规、医疗分诊、工业诊断)的鲁棒性与人机协作深度。MiniMax M2.7 是这一范式的典型工程落地,融合局部重采样、子目标拆解与知识路径回溯三大机制,为构建具备元认知能力的智能体提供关键技术路径。 阅读详情

相关推荐

python使用xpath中遇到:<Element a at 0x39a9a80>到底是什么?

主要给大家详细介绍了关于python使用xpath中遇到:的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧。

解决[<Element i at 0x18a666abf08>]问题

爬取猫眼电影并保存数据到excel的源码如下: 注:由于这个源码没有使用selenium,所有出现滑块验证是要先登录 https://maoyan.com/board/4? 进行手动验证 import requests from lxml import etree import pandas as pd df = [] # 注:猫眼电影有时要滑块验证,所以print打印出来为猫眼验证中心,要先登录网址通过滑块验证 base_url = 'https://maoyan.com/board/4?..

knighthood2001 1045

python使用xpath中遇到:Element a at 0x39a9a80到底是什么?

前言 大家在学习python爬虫的过程中,会发现一个问题,语法我看完了,说的也很详细,我也认真看了,爬虫还是不会写,或者没有思路,所以我的所有文章都会从实例的角度来解析一些常见的问题和报错。下面话不多说了,来一起看看详细的介绍吧。 Element是什么 回归正题,大家晕头转脑的看完繁杂的语法之后,已经迫不及待写点什么东西了,然后部分同学可能遇到了这个 或者类似 Element a at 0x???????,这样的一个值,然后大家带着问题去搜,然后全是英文啊,什么一大堆乱七八糟的啊,英文不好的同学就崩溃了,在这里,我会重点解析一下 某种意义

Python基础:Python中常见的Bug类型

Bug | 异常处理机制

m0_63784533的博客 802

ARTIX-7 GTP 3G-SDI 工程构建与调试实战

本文详细介绍了基于ARTIX-7 FPGA和GTP收发器的3G-SDI工程构建与调试实战。从基础概念解析到Vivado工程创建、GTP IP核配置、SDI IP核集成,再到系统集成与时钟域处理,提供了全面的技术指导。文章还分享了调试技巧、常见问题排查方法以及性能验证步骤,帮助开发者快速掌握3G-SDI视频传输技术的实现与优化。

weixin_30443813的博客 256

《点云处理算法》——GROR配准

GROR点云配准

阁楼 1315

Python代码发现异常BUG咋办?别慌报错小问题而已

今天要说的是,好多人在开始学习编程的时候,都会遇到各种各样的报错,然而出现问题后第一反应就是,唉呀,我的代码错了,怎么办?

DEVELOPERAA的博客 353

STM32以太网通信-STM32以太网外设(ETH)

通过 DMA 控制器进行介质访问控制 (MAC) STM32F4xx系列控制器内部集成了一个以太网外设,它实际上是一个通过DMA控制器进行介质访问控制(MAC),它的功能就是实现MAC 层的任务。 借助以太网外设,STM32F4xx 控制器可以通过ETH 外设按照IEEE 802.3-2002 标准发送和接收MAC 数据包。 ETH 内部自带专用的DMA 控制器用于MAC,ETH 支持两个工业标准接口介质独立接口(MII)和简化介质独立接口(RMII)用于与外部PHY 芯片连接。MII 和RMII 接口用于

暖暖_的_纠结的博客 2万+

Python 程序员经常犯的 10 个关于Python常见错误

Python 程序员经常犯的 10 个关于PythonPython是一种解释性、面向对象并具有动态语义的高级程序语言。它内建了高级的数据结构,结合了动态类型和动态绑定的优点,这使得... 关于Python Python是一种解释性、面向对象并具有动态语义的高级程序语言。它内建了高级的数据结构,结合了动态类型和动态绑定的优点,这使得它在快速应用开发中非常有吸引力,并且可作为脚本或胶水

lubingxue7048的专栏 1179

Jetpack Compose Navigation实战:从基础到高级导航模式

本文全面解析Jetpack Compose Navigation在Android开发中的应用,从基础导航实现到高级模式(如单任务/单顶模式),涵盖参数传递、嵌套导航、深层链接等核心功能。通过实战代码示例展示如何优化导航性能,并与ViewModel、Hilt等架构组件整合,为开发者提供高效的Compose导航解决方案。

pz890123456的博客 373

自动驾驶——最优控制算法(LQR)工程化总结

到近段时间,真正在我们的控制器上运行最优控制算法(LQR),一步一个脚印,从开始只是知道其“控制理论”的阶段、再到对着一堆网上的资料和公式一筹莫展不知何着手、再到初步实现了LQR算法的开发(但是使用的扭矩环控制,控制的不好,而且由于各种原因被delay,迟迟无法落地),直到大上个星期,泊车平台有此LQR开发需求,又重新了开始了算法的研发,用时一个周时间完成了算法开发,然后再用一个周时间进行实车最优控制算法验证与调试,取得了很大的进展,由于执行器是转角控制的,这无疑少了很多的工作量。

qq_40464599的博客 2787

Python中的Bug

1、Bug的由来及分类1、Bug的由来及分类Bug的由来:世界上第一部万用计算机的进化版-马克2号(Mark ll)Bug的常见类型:粗心导致的语法错误SyntaxError知识点不熟练导致的错误:(1)索引越界问题IndexError(2)append()方法的使用掌握不熟练2、不同异常类型的处理方式思路不清导致的问题解决方案(1)使用print()函数(2)使用#暂时注释部分代码3、异常处理机制try...except...else结构。

qq_61658398的博客 578

(8)(8.19) GPIOs

Ardupilot官网关于《Copter》的翻译 —《(8.19) GPIOs》。

无人机开发(开源Ardupilot) 1万+

惊呆了,我的 Python 代码里面出现了薛定谔的 Bug,看看我是怎么解决的。

问题背景 先来看一段代码: 这段代码读取tests/163/9.html这个文件里面的 HTML 代码,分别获取 <body> 下面的所有标签内部的所有<a>标签中的文本。说起来可能有点绕口,我举个例子。 <body> <div> <a href="/xx">你好</a> </div> <h2> <a>世界</...

程序员-小枫的博客 387

《Python Web项目集锦》-专栏介绍和目录

本专栏专注于Python Web项目,涉及内容包含FastAPI、Django、Flask等,所有项目代码完整且可直接运行。不管是零基础还是有经验的开发,相信都能从本专栏获益。有任何问题欢迎私聊博主,专栏持续更新中...

数据知道的博客 5213

【图论】系列(七)图论的中心性度量方法及重要性评价指标

图论中的中心性度量方法是用来衡量图中各个节点(或顶点)相对重要性的指标。

qq_30066733的博客 1077

惊呆了,我的 Python 代码里面出现了薛定谔的 Bug

摄影:产品经理文章来源:未闻Code作者:kingnameGNE: 新闻网页正文通用抽取器[1]更新了0.2.1版本,大幅度提高了正文的提取速度。在开发这个版本的时候,我遇到了一个非常奇...

简说Python的博客 472

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

html打印代码_惊呆了,我的 Python 代码里面出现了薛定谔的 Bug

IT服务圈儿有温度、有态度的IT自媒体平台本文经公众号:未闻Code(ID:itskingname)授权转载作者:kingnameGNE: 新闻网页正文通用抽取器[1]更新了0.2.1版本,大幅度提高了正文的提取速度。在开发这个版本的时候,我遇到了一个非常奇怪的 Bug,最终发现是由于垃圾回收机制和内存重用机制导致的。今天我们来看看这个问题。问题背景先来看一段代码:图1这段代码读取te...

weixin_30877775的博客 117

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

理解Python 代码中的垃圾回收机制,好好看看这篇文章吧!

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于腾讯云 作者:Python进阶者 ( 想要学习Python?Python学习交流群:1039649593,满足你的需求,资料都已经上传群文件流,可以自行下载!还有海量最新2020python学习资料。 ) GNE: 新闻网页正文通用抽取器[1]更新了0.2.1版本,大幅度提高了正文的提取速度。在开发这个版本的时候,我遇到了一个非常奇怪的 Bug,最终发现是由于垃圾回收机制和内

weixin_49345590的博客 173

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

一篇文章助力大家理解Python 代码中的垃圾回收机制

点击上方“Python爬虫与数据挖掘”,进行关注回复“书籍”即可获赠Python从入门到进阶共10本电子书今日鸡汤仰天大笑出门去,我辈岂是蓬蒿人。摄影:产品经理跟产品经理从花鸟市场淘回来...

pdcfighting的博客 192

Debug大作战:奇葩报错诊疗所——从崩溃到顿悟的奇幻旅程

调试的本质:一场与过去自己的对话程序员的终极荣耀:将奇葩报错写成段子,在笑声中升华。

scottdr的博客 380

国产大模型在科学计算中的真实可用性评测

科学计算编程是一种融合数学原理、数值稳定性与工程实践的特殊编码范式,其核心诉求不是语法正确,而是结果可信、过程鲁棒、误差可控。理解刚性微分方程求解器选型、稀疏矩阵高效求解、浮点精度陷阱等能力,远超通用代码生成范畴。当前国产AI大模型如GLM-5、DeepSeek-V3.1在中文科技文献理解、公式-代码对齐、领域库上下文感知等方面取得实质性突破,尤其在xarray、scipy.sparse、JAX等科学栈支持上展现出‘疤痕知识’积累;而GLM-4.7等早期版本暴露的数值无感、库陌生、过度封装等问题,正被垂直数

weixin_30781107的博客 339

大模型输出为何不可复现?揭秘LLM概率采样本质

大型语言模型(LLM)并非基于逻辑推理生成文本,而是依据上下文对词元进行概率分布建模并采样——这一机制决定了相同输入必然产生不同输出。其核心原理在于softmax logits的随机采样过程,受temperature、浮点运算非确定性及随机种子缺失等多重因素影响。这种‘可控随机性’带来显著的技术价值:在保持语言自然性与多样性的同时,也导致事实幻觉、格式漂移和语义不稳定等系统性偏差。典型应用场景包括客服问答、代码补全与合规审查,其中输出不一致可能引发业务逻辑断裂或下游系统崩溃。理解LLM作为‘条件概率发生器’

weixin_30267785的博客 442

Schema-Gated Agentic AI:为科学工作流构建可控智能体的原理与实践

在人工智能与自动化技术领域,智能体(Agentic AI)正成为连接自然语言指令与复杂任务执行的关键桥梁。其核心原理在于通过任务规划、工具调用与状态管理,将高层意图分解为可执行的原子操作。这项技术的核心价值在于大幅降低自动化门槛,使领域专家无需精通底层代码即可驱动复杂流程。然而,纯粹的智能体在需要严谨、可重复的科学计算与实验模拟场景中,常面临输出不可控、逻辑“幻觉”等挑战。为此,Schema-Gated(模式门控)机制应运而生,它通过预定义的流程、任务、数据模式及动态验证规则,为智能体的自主运行设立了“轨道

weixin_34337381的博客 329

Python 中有什么不容易让人察觉的有趣的事实?

提起Python,绝大多数同学第一印象就是”简单“。 但是,Python中也有很多有趣、微妙的事情,如果不用心去了解,很容易在开发过程中陷入误区,久久无法自拔。 下面,就介绍几个Python中有趣的事情。 1. 微妙的字符串 >>> a = "wtf" >>> b = "wtf" >>> a is b True >>> a = "wtf!" >>> b = "wtf!" >>> a is

jakpopc的博客 734

Python常见报错及解决方案,BUG拯救指南

Python常见报错及解决方案 如果说写代码最害怕什么,那无疑是Bug。而对于新手来说,刚刚接触编程,在享受写代码的成就感时,往往也会被各式各样的Bug弄得晕头转向。 今天,我们就做了一期Python常见报错的分享,拯救你的代码! 01 缩进错误(IndentationError) 在Python中,所有代码都是通过正确的空格排列的。所以,无论是多出来空格,还是缺少空格,整个代码都不会运行,并且仅返回一个错误函数。 Python代码遵循PEP8空白规范,每一级缩进使用4个空格。 错误示

Python0010的博客 2880
上一篇: 零基础小白必看篇:从0到1构建Python Web框架
下一篇: 小白必看篇:教你如何简单学习python,快速入门
python阿喵
博客等级 码龄6年 169粉丝 127原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值