When you assign dataset.processed.df1 = dataset.input.df1 , you’re not creating a new dataframe with the same contents, instead you’re making processed.df1 point to the same DataFrame as input.df1. This is generally how Julia works: assignment does not create a new copy.
If you want it to be a new DF, create a new dataframe with the copy method, for eg. dataset.processed.df1 = copy(dataset.input.df1; copycols=true) .
If I understand correctly, you’re showing desired behaviour here, i.e. you’d want dataset.input.df1 to be as you printed (which is not how this currently works)? If so, then the situation is that you here reassign dataset.processed.df1 to point to a new DataFrame (with "r"), while dataset.input.df1 still refers to the old one (with "w"). Instead, you need to modify the original DataFrame inplace (using ! methods). E.g.
julia> dataset.processed.df1 = dataset.input.df1 = DataFrame("w"=>2);
julia> rename!(dataset.processed.df1, :w => :r) # Change the content of dataset.processed.df1, but don't reassign the variable
1×1 DataFrame
Row │ r
│ Int64
─────┼───────
1 │ 2
julia> dataset.input.df1
1×1 DataFrame
Row │ r
│ Int64
─────┼───────
1 │ 2
Alternatively, and for the same reasons, you could work with Refs / Base.RefValues.