# Push! function changes original array

**URL:** <https://discourse.julialang.org/t/push-function-changes-original-array/52270>\
**Category:** New to Julia\
**Created:** [December 23, 2020, 11:34am UTC](https://discourse.julialang.org/t/push-function-changes-original-array/52270 "2020-12-23T11:34:19Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![Jaime](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jaime/32/8542_2.png) [@Jaime](https://discourse.julialang.org/u/Jaime)\
**Post date:** [December 23, 2020, 11:34am UTC](https://discourse.julialang.org/t/push-function-changes-original-array/52270/1 "2020-12-23T11:34:20Z")

</div>

```julia
function foo(name, package)
    
    println( package, "#1 foo pack")
    newpackage=copy(package)
    println( newpackage, "#1 foo newpack")

    push!(newpackage[1].second, name)
    println( package, "#2 foo pack")
    println( newpackage, "#2 foo newpack")

    return newpackage
end

```

```julia
julia> foo( "foo", ["A" => ["1"], "B" => ["2"]])
["A" => ["1"], "B" => ["2"]]#1 foo pack
["A" => ["1"], "B" => ["2"]]#1 foo newpack
["A" => ["1", "foo"], "B" => ["2"]]#2 foo pack
["A" => ["1", "foo"], "B" => ["2"]]#2 foo newpack
2-element Array{Pair{String,Array{String,1}},1}:
 "A" => ["1", "foo"]
 "B" => ["2"]

```

I was sure this function would not touch original input array, but it did.  
I really have no idea, I tried collect(), copy() and [:]. What the hell did I miss?

---

<div class="post-metadata">

**Author:** ![Dictino](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dictino/32/217281_2.png) [@Dictino](https://discourse.julialang.org/u/Dictino)\
**Post date:** [December 23, 2020, 11:45am UTC](https://discourse.julialang.org/t/push-function-changes-original-array/52270/2 "2020-12-23T11:45:05Z")

</div>

`deepcopy` instead of `copy` Will do the job.
