PyYAML ダンパーは、ignore_aliases
メソッドを使用して、プリミティブ型がこのように「固定」および「参照」されるのを防ぎます。そのメソッドをオーバーライドして、渡されたオブジェクトに関係なく常に 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()
、要素が同じである限り、代表者が の結果と一致し、それが別々に生成された 2 つのタプルで同じであるためです。
¹私が作成したruamel.yamlでのみこれを試しました。これは PyYAMLの拡張バージョンですが、どちらも同じように動作するはずです。