【发布时间】:2014-04-15 22:35:45
【问题描述】:
我正在尝试制作一个在整个应用程序中使用的列表不可变。我认为将这个列表包装在一个元组中就可以了,但似乎tuple(list) 实际上并没有包装,而是复制了列表元素。
>>> 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)
是否有一种简单的方法可以在此列表上创建一个不可变的列表支持“视图”(在此视图上进行操作),但反映支持列表发生的任何更改?
我意识到这个问题之前已经被问过,但没有一个回答涉及这种视图支持列表关系(事实上,一些 cmets 甚至建议元组按照我希望的方式工作,但是上面的 sn- p 另有建议)。
【问题讨论】:
-
所以,基本上,您希望它选择性地可变?这有点难以执行。您实际上想在这里解决什么问题?
-
为什么要让列表不可变?最好只在文档中声明不应更改列表。如果用户更改它,那是他或她的错。
-
我真的很好奇这里的用例...听起来很有趣。
-
@PaulBecotte:主要原因是一些重构,我想限制对我以前直接使用的列表成员变量的访问。在内部,我仍然使用列表并对其进行变异,但是每次更改它时,我不一定要被提醒也要更新其外部接口方法(我现在使用
@property而不是原来的成员变量)。
标签: python list tuples immutability