# Do comprehensions implicitly use sizehint?

**URL:** <https://discourse.julialang.org/t/do-comprehensions-implicitly-use-sizehint/41452>\
**Category:** General Usage\
**Created:** [June 15, 2020, 4:24pm UTC](https://discourse.julialang.org/t/do-comprehensions-implicitly-use-sizehint/41452 "2020-06-15T16:24:29Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![nacnudus](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/nacnudus/32/15762_2.png) [@nacnudus](https://discourse.julialang.org/u/nacnudus)\
**Post date:** [June 15, 2020, 4:24pm UTC](https://discourse.julialang.org/t/do-comprehensions-implicitly-use-sizehint/41452/1 "2020-06-15T16:24:29Z")

</div>

The Wikibook on creating dictionaries gives an [example](https://en.wikibooks.org/wiki/Introducing_Julia/Dictionaries_and_sets#Creating_dictionaries) that uses a comprehension. Would Julia automatically use a `sizehint` based on the size of `for i = 0:5:360`? Or would it be better to do that explicitly by creating an empty dictionary, then using `sizehint`, and then a `for` loop?

```nohighlight
julia> dict = Dict(string(i) => sind(i) for i = 0:5:360)
Dict{String,Float64} with 73 entries:
 "320" => -0.642788
 "65" => 0.906308
 "155" => 0.422618
 ⋮ => ⋮

```

---

<div class="post-metadata">

**Author:** ![pixel27](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/pixel27/32/8902_2.png) [@pixel27](https://discourse.julialang.org/u/pixel27)\
**Post date:** [June 15, 2020, 5:33pm UTC](https://discourse.julialang.org/t/do-comprehensions-implicitly-use-sizehint/41452/2 "2020-06-15T17:33:04Z")

</div>

You can test it:

```julia
using BenchmarkTools

println("Implicit:")
@btime begin
    dict = Dict(string(i) => sind(i) for i = 0:5:360)
end

println("Explicit:")
@btime begin
    dict = Dict{String, Int}()
    sizehint!(dict, 360÷5)
    for i in 0:5:360
        dict[string(i)] = i
    end
end

```

Results in:

```julia
Implicit:
  8.669 μs (156 allocations: 13.42 KiB)
Explicit:
  5.737 μs (153 allocations: 9.70 KiB)

```

So it appears that the first does not use `sizehint!` since it ends up with a few more allocations.

---

<div class="post-metadata">

**Author:** ![Tamas\_Papp](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tamas_papp/32/25949_2.png) [@Tamas\_Papp](https://discourse.julialang.org/u/Tamas_Papp)\
**Post date:** [June 17, 2020, 5:43am UTC](https://discourse.julialang.org/t/do-comprehensions-implicitly-use-sizehint/41452/3 "2020-06-17T05:43:14Z")

</div>

Perhaps this could be improved by the `Dict` constructor with a generator using the `IteratorSize` trait, similar to `collect`.

I could not find an existing issue, please consider opening one.

---

<div class="post-metadata">

**Author:** ![nacnudus](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/nacnudus/32/15762_2.png) [@nacnudus](https://discourse.julialang.org/u/nacnudus)\
**Post date:** [June 17, 2020, 9:33pm UTC](https://discourse.julialang.org/t/do-comprehensions-implicitly-use-sizehint/41452/4 "2020-06-17T21:33:35Z")

</div>

Thanks, I’ve opened this issue [https://github.com/JuliaLang/julia/issues/36334](https://github.com/JuliaLang/julia/issues/36334)
