@Override
		public V put(K key, V value) {
			return map.getAndUpdate(m -> {
				Map<K, V> withPut = copyMap(m);
				withPut.put(key, value);
				return withPut;
			}).get(key);
		}
Extension point: Create a mutable copy of the given map

@param map the map to copy
@return the mutable copy
Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/util/CopyOnWrite.java