在 Python 3.14 标准库中,functools.lru_cache 的 typed=True 只对函数的直接参数做类型区分,不会递归检查参数内容。因此,Decimal(42) 与 Fraction(42) 分别在两次调用中作为同一位置的直接标量参数传入时,会按不同类型分别缓存;但把它们装进结构相同的元组,例如 ('answer', Decimal(42)) 与 ('answer', Fraction(42)),外层直接参数类型都是 tuple,类型区分停留在这一层。按该版本说明,后两个元组参数会被当作等价调用,元组内部数值类型不同并不自动拆成两个缓存键。排查重点应放在外层参数类型、元组内容相等关系和缓存键设计上,而不是只看 typed 是否打开。

适用:本题针对 Python 3.14 标准库中启用 typed=True 的 functools.lru_cache,讨论直接标量参数和包含数值类型元素的元组参数。它适合苏州姑苏区台式电脑自有维护程序的去敏代码与原日志核对,不运行客户业务,也不改生产数据。若实际程序使用其他封装或版本,应先按现场版本确认调用形式。
观察:先看被缓存函数的签名和调用点,确认直接参数最外层是什么类型。若直接传入 Decimal 与 Fraction,记录它们是否形成不同缓存项;若传入元组,则检查元组长度、位置顺序、同位置元素的相等关系,以及外层是否统一为 tuple。再把原日志中的参数做去敏对照,判断两个调用是否只在元组内部数值类型上不同。结果条件可以写成:直接参数类型不同且缓存分开,说明 typed 在这一层生效;外层同为 tuple 且内容相等,则可能共用结果;日志不足以判断时,回到函数定义和调用点核对。不要通过清空客户缓存来试探,也不要反复触发带副作用的计算来观察是否重算。
风险:如果把 typed=True 理解成会递归区分参数内容,就容易忽略元组内部 Decimal(42) 与 Fraction(42) 被当作等价调用的情况,进而误判缓存命中范围,使返回结果的含义与调用方预期不一致。若用清缓存或反复调用带副作用的函数来验证,还可能扰动正在使用的维护程序状态,并掩盖原日志中的线索。对于苏州姑苏区台式电脑维护场景,这类误判会把排查引向重试或清缓存,而不是检查直接参数类型和键设计。
下一步:整理本题的去敏材料,包括函数定义、调用点、参数类型说明、去除敏感字段后的原日志、缓存封装配置和 Python 版本,不提交客户业务数据。可先按外层参数类型与元组内容相等关系复核缓存键,再决定是否需要调整调用形式或键设计。需要咨询时,可拨打 400-877-9605;电脑快修网是信息展示与第三方维修对接平台,该号码只作咨询,实际范围和安排需确认。