Я не думаю, что это возможно. То, как я его вижу, присваивание переменной ничего не делает с объектом, о котором она ранее говорила: это просто, что переменная «указывает» на другой объект.
In [3]: class My():
...: def __init__(self, id):
...: self.id=id
...:
In [4]: a = My(1)
In [5]: b = a
In [6]: a = 1
In [7]: b
Out[7]: <__main__.My instance at 0xb689d14c>
In [8]: b.id
Out[8]: 1 # the object is unchanged!
Однако вы может имитировать желаемое поведение, создавая объект-оболочку с помощью методов __setitem__()
или __setattr__()
, которые создают исключение, и сохраняют «неизменяемый» материал внутри.