0
我創建了一個SETTINGS對象作爲namedtuple
,認爲裏面的列表是不可變的。我是不正確的,因爲通過整個鏈只使用完全可變字典中對原始列表的引用。如何讓我的namedtuple實際上不可變?
因此,當我在我的名單上呼叫.pop()
時,它也將它從我不像我想象的那樣不可改變的namedtuple
中移除。現在,我在#python中瞭解了一段時間以後,爲什麼這一切都會發生。
我想知道的是:我該如何創建該設置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
>>>