diff --git a/responses/registries.py b/responses/registries.py
index 22f7951..5a0be34 100644
--- a/responses/registries.py
+++ b/responses/registries.py
@@ -1,3 +1,4 @@
+import copy
 from typing import (
     TYPE_CHECKING,
     List,
@@ -47,6 +48,11 @@ class FirstMatchRegistry(object):
         return found_match, match_failed_reasons
 
     def add(self, response: "BaseResponse") -> None:
+        if response in self.registered:
+            # if user adds multiple responses that reference the same instance
+            # see https://github.com/getsentry/responses/issues/479
+            response = copy.deepcopy(response)
+
         self.registered.append(response)
 
     def remove(self, response: "BaseResponse") -> None:

diff --git a/responses/test_responses.py b/responses/test_responses.py
index dd6f622..998c408 100644
--- a/responses/test_responses.py
+++ b/responses/test_responses.py
@@ -1925,3 +1925,28 @@ def test_requests_between_add():
 
     run()
     assert_reset()
+
+
+def test_responses_reuse():
+    @responses.activate
+    def run():
+        url = "https://someapi.com/"
+        fail_response = responses.Response(
+            method="GET", url=url, body="fail", status=500
+        )
+        responses.add(responses.GET, url, "success", status=200)
+        responses.add(fail_response)
+        responses.add(fail_response)
+        responses.add(fail_response)
+        responses.add(responses.GET, url, "success", status=200)
+        responses.add(responses.GET, url, "", status=302)
+
+        response = requests.get(url)
+        assert response.content == b"success"
+
+        for _ in range(3):
+            response = requests.get(url)
+            assert response.content == b"fail"
+
+    run()
+    assert_reset()

Reusing Response objects leads to unexpected test failures in responses 0.17.0
We had some tests start failing when we upgraded from responses 0.16.0 to 0.17.0.  They were to do with testing retry.

### Steps to Reproduce

I have found this demonstrates the error:

``` python
import responses
import requests

API_URL = 'https://someapi.com/'


@responses.activate
def test_responses_reuse():
    fail_response = responses.Response(
        method="GET", url=API_URL, body="fail", status=500
    )
    responses.add(responses.GET, API_URL, 'success', status=200)
    responses.add(fail_response)
    responses.add(fail_response)
    responses.add(fail_response)
    responses.add(responses.GET, API_URL, 'success', status=200)
    responses.add(responses.GET, API_URL, '', status=302)

    response = requests.get(API_URL)
    assert response.content == b'success'

    for _ in range(3):
        response = requests.get(API_URL)
        assert response.content == b'fail'


@responses.activate
def test_responses_recreate():
    responses.add(responses.GET, API_URL, 'success', status=200)
    responses.add(responses.GET, API_URL, 'fail', status=500)
    responses.add(responses.GET, API_URL, 'fail', status=500)
    responses.add(responses.GET, API_URL, 'fail', status=500)
    responses.add(responses.GET, API_URL, 'success', status=200)
    responses.add(responses.GET, API_URL, '', status=302)

    response = requests.get(API_URL)
    assert response.content == b'success'

    for _ in range(3):
        response = requests.get(API_URL)
        assert response.content == b'fail'
```

In responses 0.16.0 both tests pass.  In 0.17.0 `test_responses_reuse` fails (and the other one passes).

Digging in I found that the relevant change is in registries.py in the `find()` method, in code introduced in #455.

```python
    def find(self, request):
        found = None
        found_match = None
        match_failed_reasons = []
        for i, response in enumerate(self.registered):
            match_result, reason = response.matches(request)
            if match_result:
                if found is None:
                    found = i
                    found_match = response
                else:
                    if self.registered[found].call_count > 0:
                        # that assumes that some responses were added between calls
                        self.registered.pop(found)
                        found_match = response
                        break
                    # Multiple matches found.  Remove & return the first response.
                    return self.registered.pop(found), match_failed_reasons
            else:
                match_failed_reasons.append(reason)
        return found_match, match_failed_reasons
```

In particular, by reusing an object, the `call_count` attribute is shared by several objects, meaning the last reference to the shared failure response gets popped and ignored.

## Resolution

We've fixed our tests, so we're OK with "won't fix" as the resolution.  At a minimum this post can be found by search-engine-of-choice and help other people with the same issue to understand how to fix their tests.

Other options:

- in the `add()` method on the registry, there could be a check that the object being added is not already referred to by an existing entry in `self.registered` with an exception raised.  So the `find()` behaviour is the same, but the assumption it relies upon (that no object is referred to more than once in the list) is protected.
- fixing the above code to be safer.  Not immediately sure how to do that.

responses/test_responses.py::test_responses_reuse
responses/test_responses.py::test_response responses/test_responses.py::test_response_encoded responses/test_responses.py::test_response_with_instance responses/test_responses.py::test_replace[http://example.com/two-http://example.com/two] responses/test_responses.py::test_replace[original1-replacement1] responses/test_responses.py::test_replace[http://example\\.com/two-http://example\\.com/two] responses/test_responses.py::test_replace_error[http://example.com/one-http://example\\.com/one] responses/test_responses.py::test_replace_error[http://example\\.com/one-http://example.com/one] responses/test_responses.py::test_replace_response_object_error responses/test_responses.py::test_upsert_replace[http://example.com/two-http://example.com/two] responses/test_responses.py::test_upsert_replace[original1-replacement1] responses/test_responses.py::test_upsert_replace[http://example\\.com/two-http://example\\.com/two] responses/test_responses.py::test_upsert_add[http://example.com/two-http://example.com/two] responses/test_responses.py::test_upsert_add[original1-replacement1] responses/test_responses.py::test_upsert_add[http://example\\.com/two-http://example\\.com/two] responses/test_responses.py::test_remove responses/test_responses.py::test_response_equality[args10-kwargs10-args20-kwargs20-True] responses/test_responses.py::test_response_equality[args11-kwargs11-args21-kwargs21-False] responses/test_responses.py::test_response_equality[args12-kwargs12-args22-kwargs22-False] responses/test_responses.py::test_response_equality[args13-kwargs13-args23-kwargs23-True] responses/test_responses.py::test_response_equality_different_objects responses/test_responses.py::test_connection_error responses/test_responses.py::test_match_querystring responses/test_responses.py::test_match_querystring_empty responses/test_responses.py::test_match_querystring_error responses/test_responses.py::test_match_querystring_regex responses/test_responses.py::test_match_querystring_error_regex responses/test_responses.py::test_match_querystring_auto_activates responses/test_responses.py::test_match_querystring_missing_key responses/test_responses.py::test_accept_string_body responses/test_responses.py::test_accept_json_body responses/test_responses.py::test_no_content_type responses/test_responses.py::test_arbitrary_status_code responses/test_responses.py::test_throw_connection_error_explicit responses/test_responses.py::test_callback responses/test_responses.py::test_callback_deprecated_stream_argument responses/test_responses.py::test_callback_deprecated_match_querystring_argument responses/test_responses.py::test_callback_exception_result responses/test_responses.py::test_callback_exception_body responses/test_responses.py::test_callback_no_content_type responses/test_responses.py::test_callback_content_type_dict responses/test_responses.py::test_callback_matchers responses/test_responses.py::test_callback_matchers_fail responses/test_responses.py::test_callback_content_type_tuple responses/test_responses.py::test_regular_expression_url responses/test_responses.py::test_base_response_get_response responses/test_responses.py::test_custom_adapter responses/test_responses.py::test_responses_as_context_manager responses/test_responses.py::test_activate_doesnt_change_signature responses/test_responses.py::TestFixtures::test_function responses/test_responses.py::TestFixtures::test_function_decorated responses/test_responses.py::test_activate_mock_interaction responses/test_responses.py::test_activate_doesnt_change_signature_with_return_type responses/test_responses.py::test_activate_doesnt_change_signature_for_method responses/test_responses.py::test_response_cookies responses/test_responses.py::test_response_cookies_secure responses/test_responses.py::test_response_cookies_multiple responses/test_responses.py::test_response_cookies_session[True-True] responses/test_responses.py::test_response_cookies_session[True-False] responses/test_responses.py::test_response_cookies_session[True-None] responses/test_responses.py::test_response_cookies_session[False-True] responses/test_responses.py::test_response_cookies_session[False-False] responses/test_responses.py::test_response_cookies_session[False-None] responses/test_responses.py::test_response_cookies_session[None-True] responses/test_responses.py::test_response_cookies_session[None-False] responses/test_responses.py::test_response_cookies_session[None-None] responses/test_responses.py::test_response_callback responses/test_responses.py::test_response_filebody responses/test_responses.py::test_use_stream_twice_to_double_raw_io responses/test_responses.py::test_assert_all_requests_are_fired responses/test_responses.py::test_allow_redirects_samehost responses/test_responses.py::test_handles_unicode_querystring responses/test_responses.py::test_handles_unicode_url responses/test_responses.py::test_handles_unicode_body responses/test_responses.py::test_handles_buffered_reader_body responses/test_responses.py::test_headers responses/test_responses.py::test_content_length_error responses/test_responses.py::test_stream_with_none_chunk_size responses/test_responses.py::test_legacy_adding_headers responses/test_responses.py::test_auto_calculate_content_length_string_body responses/test_responses.py::test_auto_calculate_content_length_bytes_body responses/test_responses.py::test_auto_calculate_content_length_json_body responses/test_responses.py::test_auto_calculate_content_length_unicode_body responses/test_responses.py::test_auto_calculate_content_length_doesnt_work_for_buffered_reader_body responses/test_responses.py::test_multiple_responses responses/test_responses.py::test_multiple_responses_intermixed responses/test_responses.py::test_multiple_urls responses/test_responses.py::test_multiple_methods responses/test_responses.py::test_passthrough_flag responses/test_responses.py::test_passthrough_response responses/test_responses.py::test_passthrough_response_stream responses/test_responses.py::test_passthru_prefixes responses/test_responses.py::test_passthru responses/test_responses.py::test_passthru_regex responses/test_responses.py::test_passthru_does_not_persist_across_tests responses/test_responses.py::test_method_named_param responses/test_responses.py::test_passthru_unicode responses/test_responses.py::test_custom_target responses/test_responses.py::test_cookies_from_headers responses/test_responses.py::test_request_param[http://example.com] responses/test_responses.py::test_request_param[http://example.com/some/path] responses/test_responses.py::test_request_param[http://example.com/other/path/] responses/test_responses.py::test_request_param_with_multiple_values_for_the_same_key responses/test_responses.py::test_assert_call_count[http://example.com] responses/test_responses.py::test_assert_call_count[http://example.com?hello=world] responses/test_responses.py::test_fail_request_error responses/test_responses.py::test_response_representations[response_params0-<Response(url='http://example.com/' responses/test_responses.py::test_response_representations[response_params1-<Response(url='http://another-domain.com/' responses/test_responses.py::test_response_representations[response_params2-<Response(url='http://abcd.com/' responses/test_responses.py::test_mocked_responses_list_registered responses/test_responses.py::test_rfc_compliance[http://service-A/foo?q=fizz-http://service-a/foo?q=fizz] responses/test_responses.py::test_rfc_compliance[http://service-a/foo-http://service-A/foo] responses/test_responses.py::test_rfc_compliance[http://someHost-AwAy/-http://somehost-away/] responses/test_responses.py::test_rfc_compliance[http://fizzbuzz/foo-http://fizzbuzz/foo] responses/test_responses.py::test_requests_between_add