def mediumcopy(value):
    return {key: list(val) for key, val in list(value.items())}
z = {'a': [[1], [2]]}
zcopy = mediumcopy(z)
assert id(z) != id(zcopy)
assert id(z['a']) != id(zcopy['a'])
assert id(z['a'][0]) == id(zcopy['a'][0])
Существует ли такая вещь, как «средний» экземпляр? Или: как точно контролировать «глубину» копии?