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

能否按内存地址对Python列表元素排序以固定加载顺序?

按内存地址排序实现固定顺序的去重列表

当然可以实现!你想要让PROPERTIES列表每次加载都保持一致顺序的需求,完全可以通过按对象内存地址升序排序来解决,具体做法很简单:

解决方案代码

把你原来的代码修改为:

# 先合并去重,再按对象内存地址升序排序
unique_properties = set().union(*[n.properties for n in NETWORKS])
PROPERTIES = sorted(unique_properties, key=lambda x: id(x))

或者更简洁的一行写法:

PROPERTIES = sorted(set().union(*[n.properties for n in NETWORKS]), key=lambda x: id(x))

原理说明

  1. id()函数的作用:Python的id()函数会返回对象的唯一整数标识符,这个值对应你看到的内存地址(比如0x103098550就是这个整数的十六进制表示)。
  2. 为什么顺序会固定:你提到NETWORKS的加载顺序始终固定,这意味着所有Property对象的创建顺序是稳定的——而Python中(默认情况下)对象的内存分配通常是单调递增的,先创建的对象id值更小。因此按id(x)升序排序后,列表的顺序会和对象的创建顺序对应,每次加载的结果自然一致。

额外提示

如果你的Property类本身有更适合作为排序依据的属性(比如name、code这类业务字段),用这些字段排序会更直观且可读性更强。但如果没有这类字段,用id()是完全可靠的方案,它能保证同一次运行中排序稳定,且因为NETWORKS加载顺序固定,不同次加载的排序逻辑也会得到一致的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:51:39