From 59de0ee9e087a819a0a63b31c1391c6eee55b8ef Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Fri, 7 Oct 2011 10:01:28 +0200 Subject: str.replace(a, a) is now returning str unchanged if a is a --- Lib/test/test_unicode.py | 6 ++++++ Objects/unicodeobject.c | 2 ++ 2 files changed, 8 insertions(+) diff --git a/Lib/test/test_unicode.py b/Lib/test/test_unicode.py index 870853e..14d3fa6 100644 --- a/Lib/test/test_unicode.py +++ b/Lib/test/test_unicode.py @@ -275,6 +275,12 @@ class UnicodeTest(string_tests.CommonTest, self.checkequalnofix('one@two!three!', 'one!two!three!', 'replace', '!', '@', 1) self.assertRaises(TypeError, 'replace'.replace, "r", 42) + @support.cpython_only + def test_replace_id(self): + a = 'a' # single ascii letters are singletons + text = 'abc' + self.assertIs(text.replace('a', 'a'), text) + def test_bytes_comparison(self): with support.check_warnings(): warnings.simplefilter('ignore', BytesWarning) diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c index caad326..8608776 100644 --- a/Objects/unicodeobject.c +++ b/Objects/unicodeobject.c @@ -9604,6 +9604,8 @@ replace(PyObject *self, PyObject *str1, else if (maxcount == 0 || slen == 0) goto nothing; + if (str1 == str2) + goto nothing; if (skind < kind1) /* substring too wide to be present */ goto nothing; -- cgit v0.12