# \`string(dict)\` loses information

**URL:** <https://discourse.julialang.org/t/string-dict-loses-information/15489>\
**Category:** General Usage\
**Created:** [September 25, 2018, 9:58pm UTC](https://discourse.julialang.org/t/string-dict-loses-information/15489 "2018-09-25T21:58:37Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![paalon](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/paalon/32/5784_2.png) [@paalon](https://discourse.julialang.org/u/paalon)\
**Post date:** [September 25, 2018, 9:58pm UTC](https://discourse.julialang.org/t/string-dict-loses-information/15489/1 "2018-09-25T21:58:37Z")

</div>

`string(dict)` loses information if `dict` contains `Float64`. How to avoid this behavior?

```julia
# on v1.0
x = 1.000000101e8 # Float64
y = 2.000000202e8 # Float64

d = Dict("x"=>x, "y"=>y)
d2 = eval(Meta.parse(string(d)))

d["x"] == d2["x"] # false

```

---

<div class="post-metadata">

**Author:** ![kristoffer.carlsson](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kristoffer.carlsson/32/22_2.png) [@kristoffer.carlsson](https://discourse.julialang.org/u/kristoffer.carlsson)\
**Post date:** [September 25, 2018, 10:06pm UTC](https://discourse.julialang.org/t/string-dict-loses-information/15489/2 "2018-09-25T22:06:18Z")

</div>

Dont assume that you can get back your data from an object by parsing the output of `string` on it.

---

<div class="post-metadata">

**Author:** ![paalon](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/paalon/32/5784_2.png) [@paalon](https://discourse.julialang.org/u/paalon)\
**Post date:** [September 26, 2018, 3:59am UTC](https://discourse.julialang.org/t/string-dict-loses-information/15489/3 "2018-09-26T03:59:09Z")

</div>

There seems to be `context` option in `sprint`.

```julia
x = 1.000000101e8
y = 2.000000202e8

d = Dict("x"=>x, "y"=>y)
d2 = eval(Meta.parse(string(d)))
d3 = eval(Meta.parse(sprint(show, d, context=:compact => false)))

d["x"] == d2["x"] # false
d["x"] == d3["x"] # true

```

---

<div class="post-metadata">

**Author:** ![StefanKarpinski](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/stefankarpinski/32/24_2.png) [@StefanKarpinski](https://discourse.julialang.org/u/StefanKarpinski)\
**Post date:** [September 26, 2018, 4:41am UTC](https://discourse.julialang.org/t/string-dict-loses-information/15489/4 "2018-09-26T04:41:51Z")

</div>

Dictionary printing probably shouldn’t pass `:compact` by default. We don’t do that in vectors or single-column matrices anymore and it elf masker sense for `Dict` printing to match. But yes, in general, you can’t assume that object printing preserves all information.

---

<div class="post-metadata">

**Author:** ![oxinabox](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/oxinabox/32/206603_2.png) [@oxinabox](https://discourse.julialang.org/u/oxinabox)\
**Post date:** [September 26, 2018, 9:23am UTC](https://discourse.julialang.org/t/string-dict-loses-information/15489/5 "2018-09-26T09:23:06Z")

</div>

Indeed one shouldn’t rely on that for `string`. which is just “give me a string at represents this in some way”.

I feel like we should be able to rely on it for `repr`.  
I think we should have have python’s convention,  
which is roughly: _if it parses, then evaling it should give back the same as a deep copy._

But we did not adopt that convention, and it is a breaking change.  
So you can not

---

<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:** [September 26, 2018, 10:53am UTC](https://discourse.julialang.org/t/string-dict-loses-information/15489/6 "2018-09-26T10:53:48Z")

</div>

> [@paalon](#):
>
> How to avoid this behavior?

A pointed out above, printing is not guaranteed to preserve information. If you are trying to save data, consider

> **[GitHub - JuliaIO/JLD2.jl: HDF5-compatible file format in pure Julia](https://github.com/JuliaIO/JLD2.jl)**
>
> HDF5-compatible file format in pure Julia. Contribute to JuliaIO/JLD2.jl development by creating an account on GitHub.

or serialization.
