Python中的不可变列表

Python中的不可变列表,第1张

概述我正在尝试创建一个在整个应用程序中使用的列表.我认为将这个列表包装在一个元组中会起到作用,但似乎元组(列表)实际上并不包装,而是复制列表元素. >>> a = [1, 2, 3, 4]>>> b = tuple(a)>>> b(1, 2, 3, 4)>>> a[0] = 2>>> b # was hoping b[0] to be 2(1, 2, 3, 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

当然,实现您认为必要的其他任何方法,或者提出错误(或忽略写入指令) – 或者访问内部列表中的相应对象.

总结

以上是内存溢出为你收集整理的Python中的不可变列表全部内容,希望文章能够帮你解决Python中的不可变列表所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1193067.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存