This is simply how jython (and Python in general) handles object assignments. You get references instead of copies for anything that isn't a primitive type (number, string).
You can perform shallow copy by passing the original dictionary-like object to the dict() function (constructor, really). Note that you'll get a shallow copy--a new dict, but any objects within it will be references.
To truly break off your own modifiable dictionary, you need a deep copy. Python stdlib has a function that does this for pure python types.
See my integration toolkit for Ignition helpers. (Or do your own recursive function.)
My Toolkit, of course. /shameless plug.