MultiPromptChain does not use its assigned destination chains
Labels: name: auto:bug, name: area: models

### System Info

Python Version: 3.11.0
LangChain Version: 0.0.264



### Who can help?

_No response_

### Information

- [X] The official example notebooks/scripts
- [ ] My own modified scripts

### Related Components

- [ ] LLMs/Chat Models
- [ ] Embedding Models
- [ ] Prompts / Prompt Templates / Prompt Selectors
- [ ] Output Parsers
- [ ] Document Loaders
- [ ] Vector Stores / Retrievers
- [ ] Memory
- [ ] Agents / Agent Executors
- [ ] Tools / Toolkits
- [X] Chains
- [ ] Callbacks/Tracing
- [ ] Async

### Reproduction

### define a custom chain:
```
class BlastAPIChain(Chain):
    prompt: BasePromptTemplate
    llm: BaseLanguageModel

    @property
    def input_keys(self) -> List[str]:
        return ["prompt"]

    @property
    def output_keys(self) -> List[str]:
        return ["response"]

    @property
    def _chain_type(self) -> str:
        return "custom_chain"

    def _call(
            self,
            inputs: Dict[str, Any],
            run_manager: Optional[CallbackManagerForChainRun] = None
        ) -> Dict[str, str]:
        '''
        The primary method for this chain.

        :param inputs: a dictionary containing the input keys and values.
        :param run_manager: an optional callback manager for the chain run.
        '''
       # some custom logic goes here, but is omitted now
        response = 'some custom logic would go here'
        return {"response": response,}
  ```
### setup an instance of your custom chain
```
blast_api_chain_description  =     {
        "name": "blast_api_chain",
        "description": "lalalala, ",
        "template": """ lalalala """,
    }

blast_api_chain_prompt = PromptTemplate(
        template=blast_api_chain_description["template"],
        input_variables=[]
    )
blast_api_chain = BlastAPIChain(llm=llm, verbose=True, memory=memory, prompt=blast_api_chain_prompt)
```

### add the destination chains to destination_chains
```
DESTINATION_CHAINS['blast_api_chain'] = blast_api_chain
```
### create a multi-prompt-chain from the destination chain
```
master_chain = MultiPromptChain(
    router_chain=router_chain,
    destination_chains=DESTINATION_CHAINS,
    default_chain=default_chain,
    verbose=True,
)
```
### observe the issue: the blast_router_chain destination has been reassigned
```
print (master_chain.__dict__['destination_chains']['blast_api_chain'])
print (DESTINATION_CHAINS['blast_api_chain'])
```



### Expected behavior

I expect that after defining `master_chain` with the code below, the `destination_chains` attribute should hold all of the same chains that are defined in `DESTINATION_CHAINS`.

```
master_chain = MultiPromptChain(
    router_chain=router_chain,
    destination_chains=DESTINATION_CHAINS,
    default_chain=default_chain,
    verbose=True,
)
```

However, this is not the case. Instead, the chains in DESTINATION_CHAINS have been over-written with different objects. 

This can be seen here;
![image](https://github.com/langchain-ai/langchain/assets/34389563/3af6b117-ada8-4cdf-993f-486fa060a1b7)

You can see that my custom BlastAPIChain instance has been replaced with an LLMChain instance. How am I supposed to route traffic to my custom chain?