code: def observable_copy(value, name, instance):
      
  
      container_class = value.__class__
      if container_class in OBSERVABLE_REGISTRY:
          observable_class = OBSERVABLE_REGISTRY[container_class]
      elif container_class in OBSERVABLE_REGISTRY.values():
          observable_class = container_class
      else:
          observable_class = add_properties_callbacks(
              type(container_class)(
                  str('Observable{}'.format(container_class.__name__)),
                  (container_class,),
                  MUTATOR_CATEGORIES,
              )
          )
          OBSERVABLE_REGISTRY[container_class] = observable_class
      value = observable_class(value)
      value._name = name
      value._instance = instance
      return value
docs: Return an observable container for HasProperties notifications
  
      This method creates a new container class to allow HasProperties
      instances to :code:`observe_mutations`. It returns a copy of the
      input value as this new class.
  
      The output class behaves identically to the input value's original
      class, except when it is used as a property on a HasProperties
      instance. In that case, it notifies the HasProperties instance of
      any mutations or operations.