Нельзя, не легко.Имя (переменная) в Python - это просто место для указателя.Перезапишите его, и вы просто замените указатель на другой указатель, то есть изменение видны только людям, которые используют ту же самую переменную.Члены объекта в основном одинаковы, но так как их состояние видят все, у кого есть указатель на них, вы можете распространять такие изменения.Вы просто должны использовать obj.var
каждый раз .Конечно, строки (наряду с целыми числами, кортежами, несколькими другими встроенными типами и несколькими другими типами) являются неизменяемыми, то есть вы не можете ничего изменить, чтобы другие могли их видеть, поскольку вы вообще не можете их изменить.
Однако изменчивость объектов открывает еще одну возможность: вы могли бы , если бы вам пришлось потянуть за это, написать класс-обертку, который содержит объект abritary, позволяющий изменить этот объект, хотя set()
метод и делегирует все, что важно для этого объекта.Хотя вы рано или поздно столкнетесь с неприятными мелкими неприятностями.Например, я не могу себе представить, что это будет хорошо работать с метапрограммированием, которое проходит через всех участников, или с чем-либо, что, по его мнению, должно иметь дело.Это также невероятно хакерский (то есть ненадежный).Вероятно, есть гораздо более простое решение.
(В дополнение к этому PyPy имеет функцию become
в одном из своих пространств объектов, отличных от заданных по умолчанию, которая действительно и действительно заменяет один объект другим, видимый для всех со ссылкой на этот объект, хотя он не работает ни с какими другими реализациями, и я думаю, что невероятный потенциал и неправильная путаница, а также тот факт, что большинству из нас редко когда-либо требовалось это, делает его почти неприемлемым в реальном коде.)