Я хочу, чтобы два объекта совместно использовали один строковый объект.
Они будут, если вы просто передадите строку - Python не копирует, если вы не скажете ему скопировать.
Как передать строковый объект от первого ко второму так, чтобы любые изменения, примененные одним, были видны другому?
Не может никогда быть любым изменением, сделанным в строковом объекте (оно неизменяемое!), Поэтому ваше требование выполняется тривиально (поскольку ложное предусловие подразумевает что угодно).
Я предполагаю, что мне придется обернутьстроку в виде буфера объекта и делать все виды сложности, чтобы заставить его работать.
Вы можете использовать (при условии, что это Python 2 и вам нужна строка байтов) array.array
с типом кода c
.Массивы являются изменяемыми, так что вы действительно можете их изменить (с помощью методов с мутацией - и некоторых операторов, которые являются особым случаем методов, так как они вызывают специальные методы для объекта).У них нет бесчисленного множества неизменяемых методов строк, поэтому, если они вам нужны, вам действительно понадобится простая оболочка (делегирование указанных методов в str(...)
массива, который также содержит оболочка).
Кажется, не должно быть никакой особой сложности, если, конечно, вы не хотите сделать что-то действительно странное, как вы, кажется, дали свой пример кода (есть назначение , то есть * повторное связывание имени магическим образом влияет на другое имя - это не имеет абсолютно никакого отношения к объекту, который ранее был связан с именем, которое вы привязываете, и не изменяет этот объект вв любом случае - единственный объект, который он «меняет» - это , содержащий атрибут, поэтому очевидно, что вам нужны дескрипторы или другая магия для указанного объекта).
Вы, кажется, пришли изнекоторый язык, где переменные (и особенно строки) являются «контейнерами данных» (например, C, Fortran или C ++).В Python (как, скажем, в Java) имена (предпочтительный способ называть то, что другие называют «переменными») всегда просто относятся к объектам, они не содержат ничего, кромеименно такая ссылка.Некоторые объекты могут быть изменены, некоторые - нет, но это абсолютно не связано с оператором присваивания (см. Примечание 1) (который не изменяет объекты: он связывает имена).
(примечание 1): за исключением того, что повторное связывание атрибута или элемента действительно изменяет объект, который «содержит» этот элемент или атрибут - объекты могут и действительно содержать, это names , которые этого не делают.