fork download
  1. class ReadonlyMemoryView:
  2. def __init__(self, obj):
  3. self.view = memoryview(obj)
  4.  
  5. def __getitem__(self, index):
  6. value = self.view[index]
  7. if isinstance(index, slice):
  8. return self.__class__(value)
  9. return value
  10.  
  11. def __setitem__(self, index, value):
  12. raise TypeError('cannot modify read-only memory')
  13.  
  14. def __delitem__(self, index):
  15. raise TypeError('cannot modify read-only memory')
  16.  
  17. def __getattr__(self, name):
  18. return getattr(self.view, name)
  19.  
  20. m = ReadonlyMemoryView(bytearray(range(10)))
  21. print(m[3:7][1:3].tolist())
  22. m[3] = 1
Runtime error #stdin #stdout #stderr 0.02s 7216KB
stdin
Standard input is empty
stdout
[4, 5]
stderr
Traceback (most recent call last):
  File "prog.py", line 22, in <module>
  File "prog.py", line 12, in __setitem__
TypeError: cannot modify read-only memory