[英]Recursive 'Make Immutable' function in python
我有一個數據結構,它由任意嵌套的列表,整數和字符串組成。 例如:
[ "data", [ 1, "file", [], [1,2] ], 3 ]
我想使用這樣的對象對dict
進行索引,但是我不能這樣做,因為python抱怨它們不是不可變的(這是事實)。 我很驚訝地發現似乎沒有通用的遞歸“使不可變”功能。 是否存在這樣的功能? 有充分的理由不這樣做嗎? 我應該如何解決這個問題?
要用作字典鍵是非常不尋常且笨拙的數據結構,這使我想知道這是否是XY問題 。
將觀察結果放在一邊……對於您指定的特定類型的結構,除了列表(可變的)和字符串和整數(不可變的)之外,什么都不包含,將所有列表轉換為元組的遞歸函數非常簡單:
def tuplify(value):
if isinstance(value, list):
return tuple(tuplify(x) for x in value)
else:
return value
...並按預期工作:
>>> tuplify(['data', [1, 'file', [], [1, 2]], 3])
('data', (1, 'file', (), (1, 2)), 3)
但是,沒有凍結任何可變對象的解決方案。 幾年前,有人提出並拒絕了Python的凍結協議 ,但是即使已被接受,您也必須依靠每個可變對象才能實現__freeze__()
方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.