Python中的不可变列表
发布时间:2020-12-20 11:34:06 所属栏目:Python 来源:网络整理
导读:我正在尝试创建一个在整个应用程序中使用的列表.我认为将这个列表包装在一个元组中会起到作用,但似乎元组(列表)实际上并不包装,而是复制列表元素. a = [1,2,3,4] b = tuple(a) b(1,4) a[0] = 2 b # was hoping b[0] to be 2(1,4) 是否有一种简单的方法可以在
我正在尝试创建一个在整个应用程序中使用的列表.我认为将这个列表包装在一个元组中会起到作用,但似乎元组(列表)实际上并不包装,而是复制列表元素.
>>> a = [1,2,3,4] >>> b = tuple(a) >>> b (1,4) >>> a[0] = 2 >>> b # was hoping b[0] to be 2 (1,4) 是否有一种简单的方法可以在此列表上创建一个列表支持的“视图”,该视图是不可变的(此视图上的操作),但是反映了支持列表中发生的任何更改? 我意识到之前已经问过这个问题,但没有一个回复解决这个视图支持列表关系(实际上一些评论甚至表明元组按照我希望的方式工作,但上面的代码片段暗示了其他情况). 解决方法
如果您不想复制数据,并希望传递不可更改的“列表”,一种方法是创建代理对象,列表副本,禁用所有更改方法,并参考读取方法到原始列表 – 一些东西:
class ReadOnlyList(list): def __init__(self,other): self._list = other def __getitem__(self,index): return self._list[index] def __iter__(self): return iter(self._list) def __slice__(self,*args,**kw): return self._list.__slice__(*args,**kw) def __repr__(self): return repr(self._list) def __len__(self): return len(self._list) def NotImplemented(self,**kw): raise ValueError("Read Only list proxy") append = pop = __setitem__ = __setslice__ = __delitem__ = NotImplemented 当然,实现您认为必要的其他任何方法,或者提出错误(或忽略写入指令) – 或者访问内部列表中的相应对象. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |