JuliaCollections/OrderedCollections.jl

OrderedDict should rehash on deepcopy (like Dict does)

Aperta

#115 aperta il 20 apr 2024

 (0 commenti) (0 reazioni) (0 assegnatari)Julia (42 fork)auto 404
good first issue

Metriche repository

Star
 (112 stelle)
Metriche merge PR
 (Nessuna PR mergiata in 30 g)

Descrizione

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

Guida contributor