How do you copy custom property without referencing it?

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.