You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

遍历数据结构时如何追踪已访问节点?Python实现方案探讨

问题:遍历可变对象组成的结构化数据时,如何避免重复访问?

我是Python新手,正在阅读Mark Lutz所著的《Learning Python》。书中第9章末尾的「警惕循环数据结构」部分提到,在遍历嵌套结构、图等结构化数据时需避免循环(或重复访问),建议使用列表、字典或集合记录已访问项。

这点很清晰,集合似乎是合适的选择。但如果数据结构由各种可变对象组成,这些对象无法加入集合,因为Python集合仅接受不可变(或可哈希)对象,即以下伪代码无法生效:

if node not in visited:
    visited.append(node)
    process(node)

请问采用Python风格的实现方式,有什么好的解决办法?我有几个思路,但不确定哪种更合适:

  • 使用集合追踪id(obj)而非对象引用本身,但我感觉id()是Python内部实现细节,这样用有点投机取巧。
    if id(node) not in visited:
    
  • 为数据结构/图中的每个对象添加唯一索引属性,用集合追踪该索引。如果所有对象都是同一类或至少是类实例,这种方法很简单,但如果部分节点是列表这类对象,就无法实现。
    if node.index not in visited: ...
    
  • 使用列表记录已访问项,但集合在概念上正是所需的工具,用列表模拟集合似乎不太理想。

内容的提问来源于stack exchange,提问作者holplugh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.02 07:33:10