On Fri, Jul 3, 2015 at 10:40 AM, Yichao Yu <[email protected]> wrote: > On Fri, Jul 3, 2015 at 9:42 AM, Ali Rezaee <[email protected]> wrote: >> Thank you. What would be the work around? How can I push values to >> defaultdict without changing any other value? > > The README I linked is exactly about that.
And quote it here for future reference: > Note that in the last example, we need to use a function to create each new > `DefaultDict`. If we forget, we will end up using the same `DefaultDict` for > all default values: In their case, the value of a parent DefaultDict is also a DefaultDict so it might be a little confusing. You can pretty much replace the DefaultDict above by `Array` and it will apply to your case directly. > >> >> On Friday, July 3, 2015 at 3:35:39 PM UTC+2, Yichao Yu wrote: >>> >>> On Fri, Jul 3, 2015 at 9:29 AM, Ali Rezaee <[email protected]> wrote: >>> > Hi, >>> > >>> > I have the following code: >>> > >>> > using DataStrucures >>> > d= DefaultDict(ASCIIString,Array{Int64},Array{Int64}(0)) >>> > >>> > push!(d["A"],2) >>> > push!(d["B"],3) >>> > >>> > d >>> > DataStructures.DefaultDict{ASCIIString,Array{Int64,N},Array{Int64,1}} >>> > with 2 >>> > entries: >>> > "B" => [2,3] >>> > "A" => [2,3] >>> > >>> > >>> > Isn't it unexpected that when I push to any key, the value is pushed to >>> > all >>> > the other keys as well? >>> >>> Yes, pretty much. Because the default value is stored by reference and >>> you are mutating it with `push!` >>> >>> See the last paragraph of the corresponding section in the >>> DataStructures.jl README[1] >>> >>> [1] >>> https://github.com/JuliaLang/DataStructures.jl#defaultdict-and-defaultordereddict >>> >>> > >>> > Thanks :)
