class Str:
def __init__(self, s):
self._str = list(s)
def __str__(self):
return ''.join(self._str)
def __setitem__(self, idx, x):
self._str[idx] = list(x) if isinstance(idx, slice) else x
def replace(self, what, with_):
self._str = list(str(self).replace(what, with_))
A = Str('mystring')
print(id(A), A)
A[0] = '-'
print(id(A), A)
A[:] = 'newstring'
print(id(A), A)
A.replace('new', 'replace')
print(id(A), A)
Y2xhc3MgU3RyOgoJZGVmIF9faW5pdF9fKHNlbGYsIHMpOgoJCXNlbGYuX3N0ciA9IGxpc3QocykKCQoJZGVmIF9fc3RyX18oc2VsZik6CgkJcmV0dXJuICcnLmpvaW4oc2VsZi5fc3RyKQoJCglkZWYgX19zZXRpdGVtX18oc2VsZiwgaWR4LCB4KToKCQlzZWxmLl9zdHJbaWR4XSA9IGxpc3QoeCkgaWYgaXNpbnN0YW5jZShpZHgsIHNsaWNlKSBlbHNlIHgKCQoJZGVmIHJlcGxhY2Uoc2VsZiwgd2hhdCwgd2l0aF8pOgoJCXNlbGYuX3N0ciA9IGxpc3Qoc3RyKHNlbGYpLnJlcGxhY2Uod2hhdCwgd2l0aF8pKQoJCkEgPSBTdHIoJ215c3RyaW5nJykKcHJpbnQoaWQoQSksIEEpCgpBWzBdID0gJy0nCnByaW50KGlkKEEpLCBBKQoKQVs6XSA9ICduZXdzdHJpbmcnCnByaW50KGlkKEEpLCBBKQoKQS5yZXBsYWNlKCduZXcnLCAncmVwbGFjZScpCnByaW50KGlkKEEpLCBBKQ==