我创建了一个 SETTINGS 对象,namedtuple
认为其中包含的列表是不可变的。我错了,因为在整个链中,只使用了对完全可变字典中原始列表的引用。
因此,当我调用.pop()
我的列表时,它也会将它从我的 not-as-immutable-as-I-thought 中删除namedtuple
。现在我在#python 一段时间后明白了为什么这一切都会发生。
我想知道的是:如何将 SETTINGS 创建namedtuple
为行尾?只是数据,没有对任何其他对象的引用,以一种用户可编辑的方式?我觉得这dict
是人类最容易阅读/编辑的数据结构,因此我dict
将namedtuple
.
>>> from collections import namedtuple
>>>
>>> _settings = {
... 'ROOM_NAMES': [
... 'Master Bedroom',
... 'Bath',
... 'Kitchen',
... 'Study',
... ],
... }
>>> _Settings = namedtuple('_Settings', [k for k in _settings.keys()])
>>> SETTINGS = _Settings(**_settings)
>>>
>>> names = SETTINGS.ROOM_NAMES
>>> names
['Master Bedroom', 'Bath', 'Kitchen', 'Study']
>>> type(names)
<class 'list'>
>>> # POP 'Study' OFF OF THE LIST
>>> name = names.pop()
>>>
>>> # THIS IS WHAT I EXPECT
>>> name in names
False
>>>
>>> # MISSING HERE AS THIS IS THE END OF THE LINE
>>> name in _settings['ROOM_NAMES']
False
>>>
>>> # MISSING HERE FROM MY NAMEDTUPLE IN THE MIDDLE OF THE LINE
>>> name in SETTINGS.ROOM_NAMES
False
>>>