PyYAML 转储程序使用一种ignore_aliases
方法来防止原始类型以这种方式“锚定”和“引用”。您可以覆盖该方法以始终忽略传入的任何对象而忽略别名。默认情况下,yaml.Loader
该类用于yaml.load
¹:
t = ("b", "c")
x = {(1, t):1, (2, t):2, }
yaml.Dumper.ignore_aliases = lambda *args : True
yaml.dump(x, sys.stdout)
会给你:
? !!python/tuple
- 1
- !!python/tuple [b, c]
: 1
? !!python/tuple
- 2
- !!python/tuple [b, c]
: 2
这样您就不必尽最大努力让具有相同哈希的元组看起来不同。您可能希望将default_flow_style
参数提供yaml.load
给False
或True
获取不同的输出布局。
你不能让它工作的原因是表示器匹配的结果id()
和对于单独生成的两个元组来说是相同的,只要元素是相同的。
¹我只用我是作者的ruamel.yaml尝试了这个,它是 PyYAML 的增强版本,但是对于这个来说,两者应该是一样的。