JuliaCollections/OrderedCollections.jl

OrderedDict should rehash on deepcopy (like Dict does)

開放

#115 建立於 2024年4月20日

 (0 則留言) (0 個反應) (0 位負責人)Julia (42 個分叉)auto 404
good first issue

倉庫指標

星標
 (112 顆星)
PR 合併指標
 (30 天內沒有已合併 PR)

描述

Compare:

julia> mutable struct ConstIdentity
       end

julia> dict = OrderedDict{ConstIdentity, Int64}()
Dict{ConstIdentity, Int64}()

julia> dict[ConstIdentity()] = 1
1

julia> dict[ConstIdentity()] = 2
2

julia> all(haskey.((dict,), keys(dict)))
true

julia> dict2 = deepcopy(dict)
OrderedDict{ConstIdentity, Int64} with 2 entries:
  ConstIdentity() => 1
  ConstIdentity() => 2

julia> all(haskey.((dict2,), keys(dict2)))
false

vs Dict:

julia> mutable struct ConstIdentity
       end

julia> dict = Dict{ConstIdentity, Int64}()
Dict{ConstIdentity, Int64}()

julia> dict[ConstIdentity()] = 1
1

julia> dict[ConstIdentity()] = 2
2

julia> all(haskey.((dict,), keys(dict)))
true

julia> dict2 = deepcopy(dict)
Dict{ConstIdentity, Int64} with 2 entries:
  ConstIdentity() => 1
  ConstIdentity() => 2

julia> all(haskey.((dict2,), keys(dict2)))
true

We need to override deepcopy_internal to rehash like base does: https://github.com/JuliaLang/julia/blob/13155226e11fa025be5d4d3033d25c1091b35887/base/deepcopy.jl#L141-L156

貢獻者指南